{
  "contractName": "MoonwalkerswapV2LiquidityMathLibrary",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2LiquidityMathLibrary.sol\":\"MoonwalkerswapV2LiquidityMathLibrary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol\":{\"keccak256\":\"0x159bee476db809637551ce5ad20be89ad14ea04cb5150cd0c0ec857e81d82c24\",\"urls\":[\"bzz-raw://41d88c1b2583bf07daf655dfebdae4ac77e8ee10b96ec860666f0dd5bfabdaab\",\"dweb:/ipfs/QmNi6c4r9JoJRbkvmB5bbmDKgwXTyuqoHLVESAekem3quu\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2LiquidityMathLibrary.sol\":{\"keccak256\":\"0x355113861dc69cdd15e7c18fb1d4c139ec269083ba083985680319049c237b84\",\"urls\":[\"bzz-raw://5837bb980e46863bae883f80005372bc9ede07859270095454c9ac9ee2e0dfef\",\"dweb:/ipfs/QmdSZs5vUjLpMWsEXSdHEoacCt26DLcZRSJ5exZQAVBXi8\"]},\"/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/SafeMath.sol\":{\"keccak256\":\"0x27f0ea82f879b3b01387b583e6d9d0ec858dca3b22b0aad173f8fbda06e761e1\",\"urls\":[\"bzz-raw://0db9cf37793eb7035f0bfced36323d240f0212150009c39a3a108701d9b50b6c\",\"dweb:/ipfs/QmUAdiG9XNcieXkKfiMB49zQqD34FbXFE15csV2KQzwEqg\"]},\"moonwalkerswap-libraries/contracts/libraries/Babylonian.sol\":{\"keccak256\":\"0xeb1c2a281a00f4660775f75ccfa1e51fbe1d75f86aeb9d0d297151ecdb900177\",\"urls\":[\"bzz-raw://68515f0265381bddfb1d1356ea10ce4e5784276fc09f197fcdcedfa5c75cc069\",\"dweb:/ipfs/QmXWVVPnuJwRUAu3Qpu1s7Fyc5WPQxmZPczVEe5cJ5wVHZ\"]},\"moonwalkerswap-libraries/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0xc4ffcf28169f73fc9fdd1f82345d6d4fcccf3fd5aea83c133437c25e4e0950a9\",\"urls\":[\"bzz-raw://c9257a47501005f0a648bc4801ef4abc33843681aaf03a6d0c43d46b69e37407\",\"dweb:/ipfs/QmciHvDrqhxs5fjsrm9aNq29FZXpunMn17n2wWj83Zsh3B\"]},\"moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol\":{\"keccak256\":\"0xeb65ccec387520ac1b49bc1a9e0d317fd85f69c831c57f45b8bd753e3a670090\",\"urls\":[\"bzz-raw://d72d7d945689ad68b45feecc9fdeb9d66717ec1d99546a69094594f479c597bb\",\"dweb:/ipfs/QmW2XrR7vYWpKhUT9fqfzJ1YYWwFhQqDBM2ehi4FFZ7fE4\"]},\"moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol\":{\"keccak256\":\"0x4c888477bfd9725859e9136902f4e0e2b00c1f60fa640083226cb04a2e6e2b2d\",\"urls\":[\"bzz-raw://6bdfa268dbce3f14b7a324c84094d2aa4b51764a344c61eb7e7d179ca54f6861\",\"dweb:/ipfs/QmcGAFVuybBuNyp8Woza32E8T1Dsh9nrrCgecmHEazFTx6\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d4f101002ffd780a6179c3be6e54beb498f4f18043744131b43c0acc077db3e864736f6c63430006060033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d4f101002ffd780a6179c3be6e54beb498f4f18043744131b43c0acc077db3e864736f6c63430006060033",
  "immutableReferences": {},
  "sourceMap": "533:5557:11:-:0;;132:2:-1;166:7;155:9;146:7;137:37;255:7;249:14;246:1;241:23;235:4;232:33;222:2;;269:9;222:2;293:9;290:1;283:20;323:4;314:7;306:22;347:7;338;331:24",
  "deployedSourceMap": "533:5557:11:-:0;;;;;;12:1:-1;9;2:12",
  "source": "pragma solidity >=0.5.0;\n\nimport 'moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol';\nimport 'moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol';\nimport 'moonwalkerswap-libraries/contracts/libraries/Babylonian.sol';\nimport 'moonwalkerswap-libraries/contracts/libraries/FullMath.sol';\n\nimport './SafeMath.sol';\nimport './MoonwalkerswapV2Library.sol';\n\n// library containing some math for dealing with the liquidity shares of a pair, e.g. computing their exact value\n// in terms of the underlying tokens\nlibrary MoonwalkerswapV2LiquidityMathLibrary {\n    using SafeMath for uint256;\n\n    // computes the direction and magnitude of the profit-maximizing trade\n    function computeProfitMaximizingTrade(\n        uint256 truePriceTokenA,\n        uint256 truePriceTokenB,\n        uint256 reserveA,\n        uint256 reserveB\n    ) pure internal returns (bool aToB, uint256 amountIn) {\n        aToB = FullMath.mulDiv(reserveA, truePriceTokenB, reserveB) < truePriceTokenA;\n\n        uint256 invariant = reserveA.mul(reserveB);\n\n        uint256 leftSide = Babylonian.sqrt(\n            FullMath.mulDiv(\n                invariant.mul(1000),\n                aToB ? truePriceTokenA : truePriceTokenB,\n                (aToB ? truePriceTokenB : truePriceTokenA).mul(997)\n            )\n        );\n        uint256 rightSide = (aToB ? reserveA.mul(1000) : reserveB.mul(1000)) / 997;\n\n        if (leftSide < rightSide) return (false, 0);\n\n        // compute the amount that must be sent to move the price to the profit-maximizing price\n        amountIn = leftSide.sub(rightSide);\n    }\n\n    // gets the reserves after an arbitrage moves the price to the profit-maximizing ratio given an externally observed true price\n    function getReservesAfterArbitrage(\n        address factory,\n        address tokenA,\n        address tokenB,\n        uint256 truePriceTokenA,\n        uint256 truePriceTokenB\n    ) view internal returns (uint256 reserveA, uint256 reserveB) {\n        // first get reserves before the swap\n        (reserveA, reserveB) = MoonwalkerswapV2Library.getReserves(factory, tokenA, tokenB);\n\n        require(reserveA > 0 && reserveB > 0, 'MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES');\n\n        // then compute how much to swap to arb to the true price\n        (bool aToB, uint256 amountIn) = computeProfitMaximizingTrade(truePriceTokenA, truePriceTokenB, reserveA, reserveB);\n\n        if (amountIn == 0) {\n            return (reserveA, reserveB);\n        }\n\n        // now affect the trade to the reserves\n        if (aToB) {\n            uint amountOut = MoonwalkerswapV2Library.getAmountOut(amountIn, reserveA, reserveB);\n            reserveA += amountIn;\n            reserveB -= amountOut;\n        } else {\n            uint amountOut = MoonwalkerswapV2Library.getAmountOut(amountIn, reserveB, reserveA);\n            reserveB += amountIn;\n            reserveA -= amountOut;\n        }\n    }\n\n    // computes liquidity value given all the parameters of the pair\n    function computeLiquidityValue(\n        uint256 reservesA,\n        uint256 reservesB,\n        uint256 totalSupply,\n        uint256 liquidityAmount,\n        bool feeOn,\n        uint kLast\n    ) internal pure returns (uint256 tokenAAmount, uint256 tokenBAmount) {\n        if (feeOn && kLast > 0) {\n            uint rootK = Babylonian.sqrt(reservesA.mul(reservesB));\n            uint rootKLast = Babylonian.sqrt(kLast);\n            if (rootK > rootKLast) {\n                uint numerator1 = totalSupply;\n                uint numerator2 = rootK.sub(rootKLast);\n                uint denominator = rootK.mul(5).add(rootKLast);\n                uint feeLiquidity = FullMath.mulDiv(numerator1, numerator2, denominator);\n                totalSupply = totalSupply.add(feeLiquidity);\n            }\n        }\n        return (reservesA.mul(liquidityAmount) / totalSupply, reservesB.mul(liquidityAmount) / totalSupply);\n    }\n\n    // get all current parameters from the pair and compute value of a liquidity amount\n    // **note this is subject to manipulation, e.g. sandwich attacks**. prefer passing a manipulation resistant price to\n    // #getLiquidityValueAfterArbitrageToPrice\n    function getLiquidityValue(\n        address factory,\n        address tokenA,\n        address tokenB,\n        uint256 liquidityAmount\n    ) internal view returns (uint256 tokenAAmount, uint256 tokenBAmount) {\n        (uint256 reservesA, uint256 reservesB) = MoonwalkerswapV2Library.getReserves(factory, tokenA, tokenB);\n        IMoonwalkerPair pair = IMoonwalkerPair(MoonwalkerswapV2Library.pairFor(factory, tokenA, tokenB));\n        bool feeOn = IMoonwalkerFactory(factory).feeTo() != address(0);\n        uint kLast = feeOn ? pair.kLast() : 0;\n        uint totalSupply = pair.totalSupply();\n        return computeLiquidityValue(reservesA, reservesB, totalSupply, liquidityAmount, feeOn, kLast);\n    }\n\n    // given two tokens, tokenA and tokenB, and their \"true price\", i.e. the observed ratio of value of token A to token B,\n    // and a liquidity amount, returns the value of the liquidity in terms of tokenA and tokenB\n    function getLiquidityValueAfterArbitrageToPrice(\n        address factory,\n        address tokenA,\n        address tokenB,\n        uint256 truePriceTokenA,\n        uint256 truePriceTokenB,\n        uint256 liquidityAmount\n    ) internal view returns (\n        uint256 tokenAAmount,\n        uint256 tokenBAmount\n    ) {\n        bool feeOn = IMoonwalkerFactory(factory).feeTo() != address(0);\n        IMoonwalkerPair pair = IMoonwalkerPair(MoonwalkerswapV2Library.pairFor(factory, tokenA, tokenB));\n        uint kLast = feeOn ? pair.kLast() : 0;\n        uint totalSupply = pair.totalSupply();\n\n        // this also checks that totalSupply > 0\n        require(totalSupply >= liquidityAmount && liquidityAmount > 0, 'ComputeLiquidityValue: LIQUIDITY_AMOUNT');\n\n        (uint reservesA, uint reservesB) = getReservesAfterArbitrage(factory, tokenA, tokenB, truePriceTokenA, truePriceTokenB);\n\n        return computeLiquidityValue(reservesA, reservesB, totalSupply, liquidityAmount, feeOn, kLast);\n    }\n}\n",
  "sourcePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2LiquidityMathLibrary.sol",
  "ast": {
    "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2LiquidityMathLibrary.sol",
    "exportedSymbols": {
      "MoonwalkerswapV2LiquidityMathLibrary": [
        5185
      ]
    },
    "id": 5186,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4721,
        "literals": [
          "solidity",
          ">=",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol",
        "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol",
        "id": 4722,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 8545,
        "src": "26:73:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
        "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
        "id": 4723,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 8303,
        "src": "100:76:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "moonwalkerswap-libraries/contracts/libraries/Babylonian.sol",
        "file": "moonwalkerswap-libraries/contracts/libraries/Babylonian.sol",
        "id": 4724,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 6952,
        "src": "177:69:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "moonwalkerswap-libraries/contracts/libraries/FullMath.sol",
        "file": "moonwalkerswap-libraries/contracts/libraries/FullMath.sol",
        "id": 4725,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 8080,
        "src": "247:67:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/SafeMath.sol",
        "file": "./SafeMath.sol",
        "id": 4726,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 5368,
        "src": "316:24:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol",
        "file": "./MoonwalkerswapV2Library.sol",
        "id": 4727,
        "nodeType": "ImportDirective",
        "scope": 5186,
        "sourceUnit": 4720,
        "src": "341:39:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": null,
        "fullyImplemented": true,
        "id": 5185,
        "linearizedBaseContracts": [
          5185
        ],
        "name": "MoonwalkerswapV2LiquidityMathLibrary",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 4730,
            "libraryName": {
              "contractScope": null,
              "id": 4728,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 5367,
              "src": "590:8:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$5367",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "584:27:11",
            "typeName": {
              "id": 4729,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "603:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "body": {
              "id": 4819,
              "nodeType": "Block",
              "src": "906:689:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4745,
                      "name": "aToB",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4741,
                      "src": "916:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 4748,
                            "name": "reserveA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4736,
                            "src": "939:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4749,
                            "name": "truePriceTokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4734,
                            "src": "949:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 4750,
                            "name": "reserveB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4738,
                            "src": "966:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4746,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8079,
                            "src": "923:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$8079_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 4747,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8078,
                          "src": "923:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4751,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "923:52:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 4752,
                        "name": "truePriceTokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4732,
                        "src": "978:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "923:70:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "916:77:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4755,
                  "nodeType": "ExpressionStatement",
                  "src": "916:77:11"
                },
                {
                  "assignments": [
                    4757
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4757,
                      "mutability": "mutable",
                      "name": "invariant",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4819,
                      "src": "1004:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4756,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1004:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4762,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4760,
                        "name": "reserveB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4738,
                        "src": "1037:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4758,
                        "name": "reserveA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4736,
                        "src": "1024:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4759,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5366,
                      "src": "1024:12:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4761,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1024:22:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1004:42:11"
                },
                {
                  "assignments": [
                    4764
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4764,
                      "mutability": "mutable",
                      "name": "leftSide",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4819,
                      "src": "1057:16:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4763,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1057:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4787,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31303030",
                                "id": 4771,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1152:4:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                },
                                "value": "1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4769,
                                "name": "invariant",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4757,
                                "src": "1138:9:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4770,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5366,
                              "src": "1138:13:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4772,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1138:19:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "condition": {
                              "argumentTypes": null,
                              "id": 4773,
                              "name": "aToB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4741,
                              "src": "1175:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseExpression": {
                              "argumentTypes": null,
                              "id": 4775,
                              "name": "truePriceTokenB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4734,
                              "src": "1200:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4776,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "Conditional",
                            "src": "1175:40:11",
                            "trueExpression": {
                              "argumentTypes": null,
                              "id": 4774,
                              "name": "truePriceTokenA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4732,
                              "src": "1182:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "393937",
                                "id": 4783,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1280:3:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_997_by_1",
                                  "typeString": "int_const 997"
                                },
                                "value": "997"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_997_by_1",
                                  "typeString": "int_const 997"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "components": [
                                  {
                                    "argumentTypes": null,
                                    "condition": {
                                      "argumentTypes": null,
                                      "id": 4777,
                                      "name": "aToB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4741,
                                      "src": "1234:4:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "falseExpression": {
                                      "argumentTypes": null,
                                      "id": 4779,
                                      "name": "truePriceTokenA",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4732,
                                      "src": "1259:15:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4780,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "Conditional",
                                    "src": "1234:40:11",
                                    "trueExpression": {
                                      "argumentTypes": null,
                                      "id": 4778,
                                      "name": "truePriceTokenB",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4734,
                                      "src": "1241:15:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 4781,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "1233:42:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4782,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5366,
                              "src": "1233:46:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4784,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1233:51:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 4767,
                            "name": "FullMath",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8079,
                            "src": "1105:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_FullMath_$8079_$",
                              "typeString": "type(library FullMath)"
                            }
                          },
                          "id": 4768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mulDiv",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 8078,
                          "src": "1105:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 4785,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1105:193:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4765,
                        "name": "Babylonian",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6951,
                        "src": "1076:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Babylonian_$6951_$",
                          "typeString": "type(library Babylonian)"
                        }
                      },
                      "id": 4766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sqrt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6950,
                      "src": "1076:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1076:232:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1057:251:11"
                },
                {
                  "assignments": [
                    4789
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4789,
                      "mutability": "mutable",
                      "name": "rightSide",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4819,
                      "src": "1318:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4788,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1318:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4803,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4802,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "id": 4790,
                            "name": "aToB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4741,
                            "src": "1339:4:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31303030",
                                "id": 4797,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1380:4:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                },
                                "value": "1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4795,
                                "name": "reserveB",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4738,
                                "src": "1367:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4796,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5366,
                              "src": "1367:12:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4798,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1367:18:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 4799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "1339:46:11",
                          "trueExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31303030",
                                "id": 4793,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "1359:4:11",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                },
                                "value": "1000"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1000_by_1",
                                  "typeString": "int_const 1000"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 4791,
                                "name": "reserveA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4736,
                                "src": "1346:8:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4792,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 5366,
                              "src": "1346:12:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 4794,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1346:18:11",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 4800,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1338:48:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "393937",
                      "id": 4801,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1389:3:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_997_by_1",
                        "typeString": "int_const 997"
                      },
                      "value": "997"
                    },
                    "src": "1338:54:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1318:74:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4804,
                      "name": "leftSide",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4764,
                      "src": "1407:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 4805,
                      "name": "rightSide",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4789,
                      "src": "1418:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1407:20:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4811,
                  "nodeType": "IfStatement",
                  "src": "1403:43:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 4807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1437:5:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 4808,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1444:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "id": 4809,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "1436:10:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$",
                        "typeString": "tuple(bool,int_const 0)"
                      }
                    },
                    "functionReturnParameters": 4744,
                    "id": 4810,
                    "nodeType": "Return",
                    "src": "1429:17:11"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4812,
                      "name": "amountIn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4743,
                      "src": "1554:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4815,
                          "name": "rightSide",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4789,
                          "src": "1578:9:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4813,
                          "name": "leftSide",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4764,
                          "src": "1565:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4814,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5338,
                        "src": "1565:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 4816,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1565:23:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1554:34:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4818,
                  "nodeType": "ExpressionStatement",
                  "src": "1554:34:11"
                }
              ]
            },
            "documentation": null,
            "id": 4820,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeProfitMaximizingTrade",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4739,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4732,
                  "mutability": "mutable",
                  "name": "truePriceTokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "739:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4731,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "739:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4734,
                  "mutability": "mutable",
                  "name": "truePriceTokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "772:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "772:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4736,
                  "mutability": "mutable",
                  "name": "reserveA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "805:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4735,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "805:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4738,
                  "mutability": "mutable",
                  "name": "reserveB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "831:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4737,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "831:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "729:124:11"
            },
            "returnParameters": {
              "id": 4744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4741,
                  "mutability": "mutable",
                  "name": "aToB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "877:9:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4740,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "877:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4743,
                  "mutability": "mutable",
                  "name": "amountIn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4820,
                  "src": "888:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4742,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "888:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "876:29:11"
            },
            "scope": 5185,
            "src": "692:903:11",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 4917,
              "nodeType": "Block",
              "src": "1971:950:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4846,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 4837,
                          "name": "reserveA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4833,
                          "src": "2028:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4838,
                          "name": "reserveB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4835,
                          "src": "2038:8:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 4839,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2027:20:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 4842,
                          "name": "factory",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4822,
                          "src": "2086:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4843,
                          "name": "tokenA",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4824,
                          "src": "2095:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 4844,
                          "name": "tokenB",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4826,
                          "src": "2103:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 4840,
                          "name": "MoonwalkerswapV2Library",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4719,
                          "src": "2050:23:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                            "typeString": "type(library MoonwalkerswapV2Library)"
                          }
                        },
                        "id": 4841,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "getReserves",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 4393,
                        "src": "2050:35:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$",
                          "typeString": "function (address,address,address) view returns (uint256,uint256)"
                        }
                      },
                      "id": 4845,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2050:60:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "2027:83:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4847,
                  "nodeType": "ExpressionStatement",
                  "src": "2027:83:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 4855,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4849,
                            "name": "reserveA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4833,
                            "src": "2129:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4850,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2140:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2129:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4854,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4852,
                            "name": "reserveB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4835,
                            "src": "2145:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 4853,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2156:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "2145:12:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2129:28:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f6f6e77616c6b65727377617056324172626974726167654c6962726172793a205a45524f5f504149525f5245534552564553",
                        "id": 4856,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2159:54:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_27406bd9bdc445ccba30d2adb517cd208f3e263291844f68b475b6c70126e9c0",
                          "typeString": "literal_string \"MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES\""
                        },
                        "value": "MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_27406bd9bdc445ccba30d2adb517cd208f3e263291844f68b475b6c70126e9c0",
                          "typeString": "literal_string \"MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES\""
                        }
                      ],
                      "id": 4848,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2121:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 4857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2121:93:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4858,
                  "nodeType": "ExpressionStatement",
                  "src": "2121:93:11"
                },
                {
                  "assignments": [
                    4860,
                    4862
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4860,
                      "mutability": "mutable",
                      "name": "aToB",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4917,
                      "src": "2292:9:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 4859,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2292:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 4862,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 4917,
                      "src": "2303:16:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4861,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2303:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 4869,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 4864,
                        "name": "truePriceTokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4828,
                        "src": "2352:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4865,
                        "name": "truePriceTokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4830,
                        "src": "2369:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4866,
                        "name": "reserveA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4833,
                        "src": "2386:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 4867,
                        "name": "reserveB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4835,
                        "src": "2396:8:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4863,
                      "name": "computeProfitMaximizingTrade",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4820,
                      "src": "2323:28:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (bool,uint256)"
                      }
                    },
                    "id": 4868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2323:82:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$",
                      "typeString": "tuple(bool,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2291:114:11"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4872,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4870,
                      "name": "amountIn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4862,
                      "src": "2420:8:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 4871,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2432:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2420:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 4878,
                  "nodeType": "IfStatement",
                  "src": "2416:71:11",
                  "trueBody": {
                    "id": 4877,
                    "nodeType": "Block",
                    "src": "2435:52:11",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "id": 4873,
                              "name": "reserveA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4833,
                              "src": "2457:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4874,
                              "name": "reserveB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4835,
                              "src": "2467:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 4875,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2456:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                            "typeString": "tuple(uint256,uint256)"
                          }
                        },
                        "functionReturnParameters": 4836,
                        "id": 4876,
                        "nodeType": "Return",
                        "src": "2449:27:11"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 4879,
                    "name": "aToB",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4860,
                    "src": "2549:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4915,
                    "nodeType": "Block",
                    "src": "2738:177:11",
                    "statements": [
                      {
                        "assignments": [
                          4899
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4899,
                            "mutability": "mutable",
                            "name": "amountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4915,
                            "src": "2752:14:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4898,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "2752:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4906,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4902,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4862,
                              "src": "2806:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4903,
                              "name": "reserveB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4835,
                              "src": "2816:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4904,
                              "name": "reserveA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4833,
                              "src": "2826:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4900,
                              "name": "MoonwalkerswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "2769:23:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                "typeString": "type(library MoonwalkerswapV2Library)"
                              }
                            },
                            "id": 4901,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4492,
                            "src": "2769:36:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4905,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2769:66:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2752:83:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4909,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4907,
                            "name": "reserveB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4835,
                            "src": "2849:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4908,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4862,
                            "src": "2861:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2849:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4910,
                        "nodeType": "ExpressionStatement",
                        "src": "2849:20:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4913,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4911,
                            "name": "reserveA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4833,
                            "src": "2883:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4912,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4899,
                            "src": "2895:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2883:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4914,
                        "nodeType": "ExpressionStatement",
                        "src": "2883:21:11"
                      }
                    ]
                  },
                  "id": 4916,
                  "nodeType": "IfStatement",
                  "src": "2545:370:11",
                  "trueBody": {
                    "id": 4897,
                    "nodeType": "Block",
                    "src": "2555:177:11",
                    "statements": [
                      {
                        "assignments": [
                          4881
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4881,
                            "mutability": "mutable",
                            "name": "amountOut",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 4897,
                            "src": "2569:14:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4880,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "2569:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4888,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4884,
                              "name": "amountIn",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4862,
                              "src": "2623:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4885,
                              "name": "reserveA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4833,
                              "src": "2633:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 4886,
                              "name": "reserveB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4835,
                              "src": "2643:8:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4882,
                              "name": "MoonwalkerswapV2Library",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4719,
                              "src": "2586:23:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                                "typeString": "type(library MoonwalkerswapV2Library)"
                              }
                            },
                            "id": 4883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "getAmountOut",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 4492,
                            "src": "2586:36:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2586:66:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2569:83:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4889,
                            "name": "reserveA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4833,
                            "src": "2666:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4890,
                            "name": "amountIn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4862,
                            "src": "2678:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2666:20:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4892,
                        "nodeType": "ExpressionStatement",
                        "src": "2666:20:11"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 4895,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 4893,
                            "name": "reserveB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4835,
                            "src": "2700:8:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 4894,
                            "name": "amountOut",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4881,
                            "src": "2712:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2700:21:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 4896,
                        "nodeType": "ExpressionStatement",
                        "src": "2700:21:11"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 4918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getReservesAfterArbitrage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4822,
                  "mutability": "mutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1776:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1776:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4824,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1801:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4823,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4826,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1825:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4825,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1825:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4828,
                  "mutability": "mutable",
                  "name": "truePriceTokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1849:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4827,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1849:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4830,
                  "mutability": "mutable",
                  "name": "truePriceTokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1882:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4829,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1882:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1766:145:11"
            },
            "returnParameters": {
              "id": 4836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4833,
                  "mutability": "mutable",
                  "name": "reserveA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1935:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4832,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1935:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4835,
                  "mutability": "mutable",
                  "name": "reserveB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 4918,
                  "src": "1953:16:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4834,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1953:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1934:36:11"
            },
            "scope": 5185,
            "src": "1732:1189:11",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5017,
              "nodeType": "Block",
              "src": "3256:650:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4941,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 4937,
                      "name": "feeOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4928,
                      "src": "3270:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4940,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 4938,
                        "name": "kLast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4930,
                        "src": "3279:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 4939,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3287:1:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "3279:9:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3270:18:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 5002,
                  "nodeType": "IfStatement",
                  "src": "3266:525:11",
                  "trueBody": {
                    "id": 5001,
                    "nodeType": "Block",
                    "src": "3290:501:11",
                    "statements": [
                      {
                        "assignments": [
                          4943
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4943,
                            "mutability": "mutable",
                            "name": "rootK",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5001,
                            "src": "3304:10:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4942,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3304:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4951,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 4948,
                                  "name": "reservesB",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4922,
                                  "src": "3347:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 4946,
                                  "name": "reservesA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4920,
                                  "src": "3333:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 4947,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "mul",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 5366,
                                "src": "3333:13:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                  "typeString": "function (uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 4949,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3333:24:11",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4944,
                              "name": "Babylonian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6951,
                              "src": "3317:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Babylonian_$6951_$",
                                "typeString": "type(library Babylonian)"
                              }
                            },
                            "id": 4945,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sqrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6950,
                            "src": "3317:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3317:41:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3304:54:11"
                      },
                      {
                        "assignments": [
                          4953
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4953,
                            "mutability": "mutable",
                            "name": "rootKLast",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 5001,
                            "src": "3372:14:11",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4952,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "3372:4:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 4958,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 4956,
                              "name": "kLast",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4930,
                              "src": "3405:5:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 4954,
                              "name": "Babylonian",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6951,
                              "src": "3389:10:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_Babylonian_$6951_$",
                                "typeString": "type(library Babylonian)"
                              }
                            },
                            "id": 4955,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sqrt",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6950,
                            "src": "3389:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
                              "typeString": "function (uint256) pure returns (uint256)"
                            }
                          },
                          "id": 4957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3389:22:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3372:39:11"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4961,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 4959,
                            "name": "rootK",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4943,
                            "src": "3429:5:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 4960,
                            "name": "rootKLast",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4953,
                            "src": "3437:9:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3429:17:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 5000,
                        "nodeType": "IfStatement",
                        "src": "3425:356:11",
                        "trueBody": {
                          "id": 4999,
                          "nodeType": "Block",
                          "src": "3448:333:11",
                          "statements": [
                            {
                              "assignments": [
                                4963
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4963,
                                  "mutability": "mutable",
                                  "name": "numerator1",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 4999,
                                  "src": "3466:15:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4962,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3466:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4965,
                              "initialValue": {
                                "argumentTypes": null,
                                "id": 4964,
                                "name": "totalSupply",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4924,
                                "src": "3484:11:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3466:29:11"
                            },
                            {
                              "assignments": [
                                4967
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4967,
                                  "mutability": "mutable",
                                  "name": "numerator2",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 4999,
                                  "src": "3513:15:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4966,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3513:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4972,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4970,
                                    "name": "rootKLast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4953,
                                    "src": "3541:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4968,
                                    "name": "rootK",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4943,
                                    "src": "3531:5:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4969,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sub",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5338,
                                  "src": "3531:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4971,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3531:20:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3513:38:11"
                            },
                            {
                              "assignments": [
                                4974
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4974,
                                  "mutability": "mutable",
                                  "name": "denominator",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 4999,
                                  "src": "3569:16:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4973,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3569:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4982,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4980,
                                    "name": "rootKLast",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4953,
                                    "src": "3605:9:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "hexValue": "35",
                                        "id": 4977,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3598:1:11",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_5_by_1",
                                          "typeString": "int_const 5"
                                        },
                                        "value": "5"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_5_by_1",
                                          "typeString": "int_const 5"
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 4975,
                                        "name": "rootK",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4943,
                                        "src": "3588:5:11",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 4976,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "mul",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 5366,
                                      "src": "3588:9:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                      }
                                    },
                                    "id": 4978,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "3588:12:11",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 4979,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "add",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 5316,
                                  "src": "3588:16:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4981,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3588:27:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3569:46:11"
                            },
                            {
                              "assignments": [
                                4984
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 4984,
                                  "mutability": "mutable",
                                  "name": "feeLiquidity",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 4999,
                                  "src": "3633:17:11",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 4983,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3633:4:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 4991,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 4987,
                                    "name": "numerator1",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4963,
                                    "src": "3669:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 4988,
                                    "name": "numerator2",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4967,
                                    "src": "3681:10:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 4989,
                                    "name": "denominator",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4974,
                                    "src": "3693:11:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 4985,
                                    "name": "FullMath",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 8079,
                                    "src": "3653:8:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_FullMath_$8079_$",
                                      "typeString": "type(library FullMath)"
                                    }
                                  },
                                  "id": 4986,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "mulDiv",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 8078,
                                  "src": "3653:15:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 4990,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3653:52:11",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "3633:72:11"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 4997,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 4992,
                                  "name": "totalSupply",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4924,
                                  "src": "3723:11:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 4995,
                                      "name": "feeLiquidity",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4984,
                                      "src": "3753:12:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 4993,
                                      "name": "totalSupply",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4924,
                                      "src": "3737:11:11",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 4994,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 5316,
                                    "src": "3737:15:11",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 4996,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3737:29:11",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "3723:43:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 4998,
                              "nodeType": "ExpressionStatement",
                              "src": "3723:43:11"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5005,
                              "name": "liquidityAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4926,
                              "src": "3822:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5003,
                              "name": "reservesA",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4920,
                              "src": "3808:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5366,
                            "src": "3808:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3808:30:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 5007,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4924,
                          "src": "3841:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3808:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5011,
                              "name": "liquidityAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4926,
                              "src": "3868:15:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 5009,
                              "name": "reservesB",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4922,
                              "src": "3854:9:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5010,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5366,
                            "src": "3854:13:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 5012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3854:30:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "/",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 5013,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4924,
                          "src": "3887:11:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3854:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "id": 5015,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "3807:92:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 4936,
                  "id": 5016,
                  "nodeType": "Return",
                  "src": "3800:99:11"
                }
              ]
            },
            "documentation": null,
            "id": 5018,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeLiquidityValue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 4931,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4920,
                  "mutability": "mutable",
                  "name": "reservesA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3036:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4919,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3036:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4922,
                  "mutability": "mutable",
                  "name": "reservesB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3063:17:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4921,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3063:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4924,
                  "mutability": "mutable",
                  "name": "totalSupply",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3090:19:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4923,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3090:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4926,
                  "mutability": "mutable",
                  "name": "liquidityAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3119:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4925,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3119:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4928,
                  "mutability": "mutable",
                  "name": "feeOn",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3152:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4927,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3152:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4930,
                  "mutability": "mutable",
                  "name": "kLast",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3172:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4929,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3172:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3026:162:11"
            },
            "returnParameters": {
              "id": 4936,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4933,
                  "mutability": "mutable",
                  "name": "tokenAAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3212:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4932,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3212:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4935,
                  "mutability": "mutable",
                  "name": "tokenBAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5018,
                  "src": "3234:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4934,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3234:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3211:44:11"
            },
            "scope": 5185,
            "src": "2996:910:11",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5092,
              "nodeType": "Block",
              "src": "4374:494:11",
              "statements": [
                {
                  "assignments": [
                    5034,
                    5036
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5034,
                      "mutability": "mutable",
                      "name": "reservesA",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4385:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5033,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4385:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5036,
                      "mutability": "mutable",
                      "name": "reservesB",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4404:17:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5035,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4404:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5043,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5039,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5020,
                        "src": "4461:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5040,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5022,
                        "src": "4470:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5041,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5024,
                        "src": "4478:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5037,
                        "name": "MoonwalkerswapV2Library",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4719,
                        "src": "4425:23:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                          "typeString": "type(library MoonwalkerswapV2Library)"
                        }
                      },
                      "id": 5038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getReserves",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4393,
                      "src": "4425:35:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address,address,address) view returns (uint256,uint256)"
                      }
                    },
                    "id": 5042,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4425:60:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4384:101:11"
                },
                {
                  "assignments": [
                    5045
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5045,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4495:20:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                        "typeString": "contract IMoonwalkerPair"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5044,
                        "name": "IMoonwalkerPair",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 8544,
                        "src": "4495:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5054,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5049,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5020,
                            "src": "4566:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5050,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5022,
                            "src": "4575:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5051,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5024,
                            "src": "4583:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5047,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "4534:23:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 5048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "4534:31:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 5052,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4534:56:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5046,
                      "name": "IMoonwalkerPair",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8544,
                      "src": "4518:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                        "typeString": "type(contract IMoonwalkerPair)"
                      }
                    },
                    "id": 5053,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4518:73:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                      "typeString": "contract IMoonwalkerPair"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4495:96:11"
                },
                {
                  "assignments": [
                    5056
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5056,
                      "mutability": "mutable",
                      "name": "feeOn",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4601:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5055,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "4601:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5067,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5058,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5020,
                              "src": "4633:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5057,
                            "name": "IMoonwalkerFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8302,
                            "src": "4614:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMoonwalkerFactory_$8302_$",
                              "typeString": "type(contract IMoonwalkerFactory)"
                            }
                          },
                          "id": 5059,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4614:27:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerFactory_$8302",
                            "typeString": "contract IMoonwalkerFactory"
                          }
                        },
                        "id": 5060,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "feeTo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8256,
                        "src": "4614:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 5061,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4614:35:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5064,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4661:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 5063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4653:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5062,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "4653:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5065,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4653:10:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "4614:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4601:62:11"
                },
                {
                  "assignments": [
                    5069
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5069,
                      "mutability": "mutable",
                      "name": "kLast",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4673:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5068,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4673:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5076,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 5070,
                      "name": "feeOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5056,
                      "src": "4686:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5074,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4709:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "id": 5075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "4686:24:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5071,
                          "name": "pair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5045,
                          "src": "4694:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                            "typeString": "contract IMoonwalkerPair"
                          }
                        },
                        "id": 5072,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "kLast",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8501,
                        "src": "4694:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                          "typeString": "function () view external returns (uint256)"
                        }
                      },
                      "id": 5073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4694:12:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4673:37:11"
                },
                {
                  "assignments": [
                    5078
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5078,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5092,
                      "src": "4720:16:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5077,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4720:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5082,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5079,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5045,
                        "src": "4739:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 5080,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8340,
                      "src": "4739:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 5081,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4739:18:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4720:37:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5084,
                        "name": "reservesA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5034,
                        "src": "4796:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5085,
                        "name": "reservesB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5036,
                        "src": "4807:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5086,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5078,
                        "src": "4818:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5087,
                        "name": "liquidityAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5026,
                        "src": "4831:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5088,
                        "name": "feeOn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5056,
                        "src": "4848:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5089,
                        "name": "kLast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5069,
                        "src": "4855:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5083,
                      "name": "computeLiquidityValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5018,
                      "src": "4774:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,bool,uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 5090,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4774:87:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 5032,
                  "id": 5091,
                  "nodeType": "Return",
                  "src": "4767:94:11"
                }
              ]
            },
            "documentation": null,
            "id": 5093,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityValue",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5020,
                  "mutability": "mutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4204:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5019,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4204:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5022,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4229:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5021,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4229:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5024,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4253:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5023,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4253:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5026,
                  "mutability": "mutable",
                  "name": "liquidityAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4277:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5025,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4277:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4194:112:11"
            },
            "returnParameters": {
              "id": 5032,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5029,
                  "mutability": "mutable",
                  "name": "tokenAAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4330:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5028,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4330:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5031,
                  "mutability": "mutable",
                  "name": "tokenBAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5093,
                  "src": "4352:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5030,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4352:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4329:44:11"
            },
            "scope": 5185,
            "src": "4168:700:11",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5183,
              "nodeType": "Block",
              "src": "5409:679:11",
              "statements": [
                {
                  "assignments": [
                    5113
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5113,
                      "mutability": "mutable",
                      "name": "feeOn",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5419:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 5112,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "5419:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5124,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5123,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 5115,
                              "name": "factory",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5095,
                              "src": "5451:7:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5114,
                            "name": "IMoonwalkerFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8302,
                            "src": "5432:18:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IMoonwalkerFactory_$8302_$",
                              "typeString": "type(contract IMoonwalkerFactory)"
                            }
                          },
                          "id": 5116,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5432:27:11",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerFactory_$8302",
                            "typeString": "contract IMoonwalkerFactory"
                          }
                        },
                        "id": 5117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "feeTo",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8256,
                        "src": "5432:33:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                          "typeString": "function () view external returns (address)"
                        }
                      },
                      "id": 5118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5432:35:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 5121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "5479:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 5120,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5471:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 5119,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "5471:7:11",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 5122,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5471:10:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "5432:49:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5419:62:11"
                },
                {
                  "assignments": [
                    5126
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5126,
                      "mutability": "mutable",
                      "name": "pair",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5491:20:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                        "typeString": "contract IMoonwalkerPair"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 5125,
                        "name": "IMoonwalkerPair",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 8544,
                        "src": "5491:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5135,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 5130,
                            "name": "factory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5095,
                            "src": "5562:7:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5131,
                            "name": "tokenA",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5097,
                            "src": "5571:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 5132,
                            "name": "tokenB",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5099,
                            "src": "5579:6:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 5128,
                            "name": "MoonwalkerswapV2Library",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4719,
                            "src": "5530:23:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_MoonwalkerswapV2Library_$4719_$",
                              "typeString": "type(library MoonwalkerswapV2Library)"
                            }
                          },
                          "id": 5129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "pairFor",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4343,
                          "src": "5530:31:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_address_$_t_address_$_t_address_$returns$_t_address_$",
                            "typeString": "function (address,address,address) pure returns (address)"
                          }
                        },
                        "id": 5133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5530:56:11",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 5127,
                      "name": "IMoonwalkerPair",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8544,
                      "src": "5514:15:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IMoonwalkerPair_$8544_$",
                        "typeString": "type(contract IMoonwalkerPair)"
                      }
                    },
                    "id": 5134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5514:73:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                      "typeString": "contract IMoonwalkerPair"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5491:96:11"
                },
                {
                  "assignments": [
                    5137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5137,
                      "mutability": "mutable",
                      "name": "kLast",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5597:10:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5136,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5597:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5144,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "id": 5138,
                      "name": "feeOn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5113,
                      "src": "5610:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 5142,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5633:1:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "id": 5143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "5610:24:11",
                    "trueExpression": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 5139,
                          "name": "pair",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5126,
                          "src": "5618:4:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                            "typeString": "contract IMoonwalkerPair"
                          }
                        },
                        "id": 5140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "kLast",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 8501,
                        "src": "5618:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                          "typeString": "function () view external returns (uint256)"
                        }
                      },
                      "id": 5141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5618:12:11",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5597:37:11"
                },
                {
                  "assignments": [
                    5146
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5146,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5644:16:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5145,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5644:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5150,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 5147,
                        "name": "pair",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5126,
                        "src": "5663:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMoonwalkerPair_$8544",
                          "typeString": "contract IMoonwalkerPair"
                        }
                      },
                      "id": 5148,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 8340,
                      "src": "5663:16:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 5149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5663:18:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5644:37:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5152,
                            "name": "totalSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5146,
                            "src": "5749:11:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 5153,
                            "name": "liquidityAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5105,
                            "src": "5764:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5749:30:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 5155,
                            "name": "liquidityAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5105,
                            "src": "5783:15:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 5156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5801:1:11",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "5783:19:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "5749:53:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "436f6d707574654c697175696469747956616c75653a204c49515549444954595f414d4f554e54",
                        "id": 5159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5804:41:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_eba3c4b4bce1b370b996e883c442849cfe288700c2faa2de6af84d237654e6b8",
                          "typeString": "literal_string \"ComputeLiquidityValue: LIQUIDITY_AMOUNT\""
                        },
                        "value": "ComputeLiquidityValue: LIQUIDITY_AMOUNT"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_eba3c4b4bce1b370b996e883c442849cfe288700c2faa2de6af84d237654e6b8",
                          "typeString": "literal_string \"ComputeLiquidityValue: LIQUIDITY_AMOUNT\""
                        }
                      ],
                      "id": 5151,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5741:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5741:105:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5161,
                  "nodeType": "ExpressionStatement",
                  "src": "5741:105:11"
                },
                {
                  "assignments": [
                    5163,
                    5165
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5163,
                      "mutability": "mutable",
                      "name": "reservesA",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5858:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5162,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5858:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 5165,
                      "mutability": "mutable",
                      "name": "reservesB",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 5183,
                      "src": "5874:14:11",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5164,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5874:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 5173,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5167,
                        "name": "factory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5095,
                        "src": "5918:7:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5168,
                        "name": "tokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5097,
                        "src": "5927:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5169,
                        "name": "tokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5099,
                        "src": "5935:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5170,
                        "name": "truePriceTokenA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5101,
                        "src": "5943:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5171,
                        "name": "truePriceTokenB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5103,
                        "src": "5960:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5166,
                      "name": "getReservesAfterArbitrage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4918,
                      "src": "5892:25:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (address,address,address,uint256,uint256) view returns (uint256,uint256)"
                      }
                    },
                    "id": 5172,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5892:84:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5857:119:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 5175,
                        "name": "reservesA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5163,
                        "src": "6016:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5176,
                        "name": "reservesB",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5165,
                        "src": "6027:9:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5177,
                        "name": "totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5146,
                        "src": "6038:11:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5178,
                        "name": "liquidityAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5105,
                        "src": "6051:15:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5179,
                        "name": "feeOn",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5113,
                        "src": "6068:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 5180,
                        "name": "kLast",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5137,
                        "src": "6075:5:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5174,
                      "name": "computeLiquidityValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5018,
                      "src": "5994:21:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$_t_uint256_$returns$_t_uint256_$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256,bool,uint256) pure returns (uint256,uint256)"
                      }
                    },
                    "id": 5181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5994:87:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                      "typeString": "tuple(uint256,uint256)"
                    }
                  },
                  "functionReturnParameters": 5111,
                  "id": 5182,
                  "nodeType": "Return",
                  "src": "5987:94:11"
                }
              ]
            },
            "documentation": null,
            "id": 5184,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getLiquidityValueAfterArbitrageToPrice",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 5106,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5095,
                  "mutability": "mutable",
                  "name": "factory",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5151:15:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5094,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5151:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5097,
                  "mutability": "mutable",
                  "name": "tokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5176:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5096,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5176:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5099,
                  "mutability": "mutable",
                  "name": "tokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5200:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5098,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5200:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5101,
                  "mutability": "mutable",
                  "name": "truePriceTokenA",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5224:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5100,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5224:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5103,
                  "mutability": "mutable",
                  "name": "truePriceTokenB",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5257:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5102,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5257:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5105,
                  "mutability": "mutable",
                  "name": "liquidityAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5290:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5290:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5141:178:11"
            },
            "returnParameters": {
              "id": 5111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5108,
                  "mutability": "mutable",
                  "name": "tokenAAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5352:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5107,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5352:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5110,
                  "mutability": "mutable",
                  "name": "tokenBAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 5184,
                  "src": "5382:20:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5109,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5382:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5342:66:11"
            },
            "scope": 5185,
            "src": "5094:994:11",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 5186,
        "src": "533:5557:11"
      }
    ],
    "src": "0:6091:11"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2LiquidityMathLibrary.sol",
      "exportedSymbols": {
        "MoonwalkerswapV2LiquidityMathLibrary": [
          5185
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.5",
            ".0"
          ]
        },
        "id": 4721,
        "name": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "attributes": {
          "SourceUnit": 8545,
          "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol",
          "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerPair.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4722,
        "name": "ImportDirective",
        "src": "26:73:11"
      },
      {
        "attributes": {
          "SourceUnit": 8303,
          "absolutePath": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
          "file": "moonwalkerswap-v2-core/contracts/interfaces/IMoonwalkerFactory.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4723,
        "name": "ImportDirective",
        "src": "100:76:11"
      },
      {
        "attributes": {
          "SourceUnit": 6952,
          "absolutePath": "moonwalkerswap-libraries/contracts/libraries/Babylonian.sol",
          "file": "moonwalkerswap-libraries/contracts/libraries/Babylonian.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4724,
        "name": "ImportDirective",
        "src": "177:69:11"
      },
      {
        "attributes": {
          "SourceUnit": 8080,
          "absolutePath": "moonwalkerswap-libraries/contracts/libraries/FullMath.sol",
          "file": "moonwalkerswap-libraries/contracts/libraries/FullMath.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4725,
        "name": "ImportDirective",
        "src": "247:67:11"
      },
      {
        "attributes": {
          "SourceUnit": 5368,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/SafeMath.sol",
          "file": "./SafeMath.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4726,
        "name": "ImportDirective",
        "src": "316:24:11"
      },
      {
        "attributes": {
          "SourceUnit": 4720,
          "absolutePath": "/Users/warrenmason/Documents/UniswapV3Contracts/Core/LiveContracts/Moonwalkerswap-v2-periphery/contracts/libraries/MoonwalkerswapV2Library.sol",
          "file": "./MoonwalkerswapV2Library.sol",
          "scope": 5186,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 4727,
        "name": "ImportDirective",
        "src": "341:39:11"
      },
      {
        "attributes": {
          "abstract": false,
          "baseContracts": [
            null
          ],
          "contractDependencies": [
            null
          ],
          "contractKind": "library",
          "documentation": null,
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            5185
          ],
          "name": "MoonwalkerswapV2LiquidityMathLibrary",
          "scope": 5186
        },
        "children": [
          {
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "SafeMath",
                  "referencedDeclaration": 5367,
                  "type": "library SafeMath"
                },
                "id": 4728,
                "name": "UserDefinedTypeName",
                "src": "590:8:11"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 4729,
                "name": "ElementaryTypeName",
                "src": "603:7:11"
              }
            ],
            "id": 4730,
            "name": "UsingForDirective",
            "src": "584:27:11"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "computeProfitMaximizingTrade",
              "overrides": null,
              "scope": 5185,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenA",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4731,
                        "name": "ElementaryTypeName",
                        "src": "739:7:11"
                      }
                    ],
                    "id": 4732,
                    "name": "VariableDeclaration",
                    "src": "739:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenB",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4733,
                        "name": "ElementaryTypeName",
                        "src": "772:7:11"
                      }
                    ],
                    "id": 4734,
                    "name": "VariableDeclaration",
                    "src": "772:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveA",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4735,
                        "name": "ElementaryTypeName",
                        "src": "805:7:11"
                      }
                    ],
                    "id": 4736,
                    "name": "VariableDeclaration",
                    "src": "805:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveB",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4737,
                        "name": "ElementaryTypeName",
                        "src": "831:7:11"
                      }
                    ],
                    "id": 4738,
                    "name": "VariableDeclaration",
                    "src": "831:16:11"
                  }
                ],
                "id": 4739,
                "name": "ParameterList",
                "src": "729:124:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "aToB",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4740,
                        "name": "ElementaryTypeName",
                        "src": "877:4:11"
                      }
                    ],
                    "id": 4741,
                    "name": "VariableDeclaration",
                    "src": "877:9:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "amountIn",
                      "overrides": null,
                      "scope": 4820,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4742,
                        "name": "ElementaryTypeName",
                        "src": "888:7:11"
                      }
                    ],
                    "id": 4743,
                    "name": "VariableDeclaration",
                    "src": "888:16:11"
                  }
                ],
                "id": 4744,
                "name": "ParameterList",
                "src": "876:29:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4741,
                              "type": "bool",
                              "value": "aToB"
                            },
                            "id": 4745,
                            "name": "Identifier",
                            "src": "916:4:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "<",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mulDiv",
                                      "referencedDeclaration": 8078,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8079,
                                          "type": "type(library FullMath)",
                                          "value": "FullMath"
                                        },
                                        "id": 4746,
                                        "name": "Identifier",
                                        "src": "923:8:11"
                                      }
                                    ],
                                    "id": 4747,
                                    "name": "MemberAccess",
                                    "src": "923:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4736,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4748,
                                    "name": "Identifier",
                                    "src": "939:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4734,
                                      "type": "uint256",
                                      "value": "truePriceTokenB"
                                    },
                                    "id": 4749,
                                    "name": "Identifier",
                                    "src": "949:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4738,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4750,
                                    "name": "Identifier",
                                    "src": "966:8:11"
                                  }
                                ],
                                "id": 4751,
                                "name": "FunctionCall",
                                "src": "923:52:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4732,
                                  "type": "uint256",
                                  "value": "truePriceTokenA"
                                },
                                "id": 4752,
                                "name": "Identifier",
                                "src": "978:15:11"
                              }
                            ],
                            "id": 4753,
                            "name": "BinaryOperation",
                            "src": "923:70:11"
                          }
                        ],
                        "id": 4754,
                        "name": "Assignment",
                        "src": "916:77:11"
                      }
                    ],
                    "id": 4755,
                    "name": "ExpressionStatement",
                    "src": "916:77:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4757
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "invariant",
                          "overrides": null,
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4756,
                            "name": "ElementaryTypeName",
                            "src": "1004:7:11"
                          }
                        ],
                        "id": 4757,
                        "name": "VariableDeclaration",
                        "src": "1004:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mul",
                              "referencedDeclaration": 5366,
                              "type": "function (uint256,uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4736,
                                  "type": "uint256",
                                  "value": "reserveA"
                                },
                                "id": 4758,
                                "name": "Identifier",
                                "src": "1024:8:11"
                              }
                            ],
                            "id": 4759,
                            "name": "MemberAccess",
                            "src": "1024:12:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4738,
                              "type": "uint256",
                              "value": "reserveB"
                            },
                            "id": 4760,
                            "name": "Identifier",
                            "src": "1037:8:11"
                          }
                        ],
                        "id": 4761,
                        "name": "FunctionCall",
                        "src": "1024:22:11"
                      }
                    ],
                    "id": 4762,
                    "name": "VariableDeclarationStatement",
                    "src": "1004:42:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4764
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "leftSide",
                          "overrides": null,
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4763,
                            "name": "ElementaryTypeName",
                            "src": "1057:7:11"
                          }
                        ],
                        "id": 4764,
                        "name": "VariableDeclaration",
                        "src": "1057:16:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sqrt",
                              "referencedDeclaration": 6950,
                              "type": "function (uint256) pure returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6951,
                                  "type": "type(library Babylonian)",
                                  "value": "Babylonian"
                                },
                                "id": 4765,
                                "name": "Identifier",
                                "src": "1076:10:11"
                              }
                            ],
                            "id": 4766,
                            "name": "MemberAccess",
                            "src": "1076:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "mulDiv",
                                  "referencedDeclaration": 8078,
                                  "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 8079,
                                      "type": "type(library FullMath)",
                                      "value": "FullMath"
                                    },
                                    "id": 4767,
                                    "name": "Identifier",
                                    "src": "1105:8:11"
                                  }
                                ],
                                "id": 4768,
                                "name": "MemberAccess",
                                "src": "1105:15:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1000_by_1",
                                          "typeString": "int_const 1000"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5366,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4757,
                                          "type": "uint256",
                                          "value": "invariant"
                                        },
                                        "id": 4769,
                                        "name": "Identifier",
                                        "src": "1138:9:11"
                                      }
                                    ],
                                    "id": 4770,
                                    "name": "MemberAccess",
                                    "src": "1138:13:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31303030",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1000",
                                      "value": "1000"
                                    },
                                    "id": 4771,
                                    "name": "Literal",
                                    "src": "1152:4:11"
                                  }
                                ],
                                "id": 4772,
                                "name": "FunctionCall",
                                "src": "1138:19:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4741,
                                      "type": "bool",
                                      "value": "aToB"
                                    },
                                    "id": 4773,
                                    "name": "Identifier",
                                    "src": "1175:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4732,
                                      "type": "uint256",
                                      "value": "truePriceTokenA"
                                    },
                                    "id": 4774,
                                    "name": "Identifier",
                                    "src": "1182:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4734,
                                      "type": "uint256",
                                      "value": "truePriceTokenB"
                                    },
                                    "id": 4775,
                                    "name": "Identifier",
                                    "src": "1200:15:11"
                                  }
                                ],
                                "id": 4776,
                                "name": "Conditional",
                                "src": "1175:40:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_997_by_1",
                                          "typeString": "int_const 997"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5366,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4741,
                                                  "type": "bool",
                                                  "value": "aToB"
                                                },
                                                "id": 4777,
                                                "name": "Identifier",
                                                "src": "1234:4:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4734,
                                                  "type": "uint256",
                                                  "value": "truePriceTokenB"
                                                },
                                                "id": 4778,
                                                "name": "Identifier",
                                                "src": "1241:15:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4732,
                                                  "type": "uint256",
                                                  "value": "truePriceTokenA"
                                                },
                                                "id": 4779,
                                                "name": "Identifier",
                                                "src": "1259:15:11"
                                              }
                                            ],
                                            "id": 4780,
                                            "name": "Conditional",
                                            "src": "1234:40:11"
                                          }
                                        ],
                                        "id": 4781,
                                        "name": "TupleExpression",
                                        "src": "1233:42:11"
                                      }
                                    ],
                                    "id": 4782,
                                    "name": "MemberAccess",
                                    "src": "1233:46:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "393937",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 997",
                                      "value": "997"
                                    },
                                    "id": 4783,
                                    "name": "Literal",
                                    "src": "1280:3:11"
                                  }
                                ],
                                "id": 4784,
                                "name": "FunctionCall",
                                "src": "1233:51:11"
                              }
                            ],
                            "id": 4785,
                            "name": "FunctionCall",
                            "src": "1105:193:11"
                          }
                        ],
                        "id": 4786,
                        "name": "FunctionCall",
                        "src": "1076:232:11"
                      }
                    ],
                    "id": 4787,
                    "name": "VariableDeclarationStatement",
                    "src": "1057:251:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4789
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "rightSide",
                          "overrides": null,
                          "scope": 4819,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4788,
                            "name": "ElementaryTypeName",
                            "src": "1318:7:11"
                          }
                        ],
                        "id": 4789,
                        "name": "VariableDeclaration",
                        "src": "1318:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "/",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4741,
                                      "type": "bool",
                                      "value": "aToB"
                                    },
                                    "id": 4790,
                                    "name": "Identifier",
                                    "src": "1339:4:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_1000_by_1",
                                              "typeString": "int_const 1000"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "mul",
                                          "referencedDeclaration": 5366,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4736,
                                              "type": "uint256",
                                              "value": "reserveA"
                                            },
                                            "id": 4791,
                                            "name": "Identifier",
                                            "src": "1346:8:11"
                                          }
                                        ],
                                        "id": 4792,
                                        "name": "MemberAccess",
                                        "src": "1346:12:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31303030",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1000",
                                          "value": "1000"
                                        },
                                        "id": 4793,
                                        "name": "Literal",
                                        "src": "1359:4:11"
                                      }
                                    ],
                                    "id": 4794,
                                    "name": "FunctionCall",
                                    "src": "1346:18:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_1000_by_1",
                                              "typeString": "int_const 1000"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "mul",
                                          "referencedDeclaration": 5366,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4738,
                                              "type": "uint256",
                                              "value": "reserveB"
                                            },
                                            "id": 4795,
                                            "name": "Identifier",
                                            "src": "1367:8:11"
                                          }
                                        ],
                                        "id": 4796,
                                        "name": "MemberAccess",
                                        "src": "1367:12:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31303030",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1000",
                                          "value": "1000"
                                        },
                                        "id": 4797,
                                        "name": "Literal",
                                        "src": "1380:4:11"
                                      }
                                    ],
                                    "id": 4798,
                                    "name": "FunctionCall",
                                    "src": "1367:18:11"
                                  }
                                ],
                                "id": 4799,
                                "name": "Conditional",
                                "src": "1339:46:11"
                              }
                            ],
                            "id": 4800,
                            "name": "TupleExpression",
                            "src": "1338:48:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "393937",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 997",
                              "value": "997"
                            },
                            "id": 4801,
                            "name": "Literal",
                            "src": "1389:3:11"
                          }
                        ],
                        "id": 4802,
                        "name": "BinaryOperation",
                        "src": "1338:54:11"
                      }
                    ],
                    "id": 4803,
                    "name": "VariableDeclarationStatement",
                    "src": "1318:74:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4764,
                              "type": "uint256",
                              "value": "leftSide"
                            },
                            "id": 4804,
                            "name": "Identifier",
                            "src": "1407:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4789,
                              "type": "uint256",
                              "value": "rightSide"
                            },
                            "id": 4805,
                            "name": "Identifier",
                            "src": "1418:9:11"
                          }
                        ],
                        "id": 4806,
                        "name": "BinaryOperation",
                        "src": "1407:20:11"
                      },
                      {
                        "attributes": {
                          "functionReturnParameters": 4744
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "tuple(bool,int_const 0)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 4807,
                                "name": "Literal",
                                "src": "1437:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4808,
                                "name": "Literal",
                                "src": "1444:1:11"
                              }
                            ],
                            "id": 4809,
                            "name": "TupleExpression",
                            "src": "1436:10:11"
                          }
                        ],
                        "id": 4810,
                        "name": "Return",
                        "src": "1429:17:11"
                      }
                    ],
                    "id": 4811,
                    "name": "IfStatement",
                    "src": "1403:43:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4743,
                              "type": "uint256",
                              "value": "amountIn"
                            },
                            "id": 4812,
                            "name": "Identifier",
                            "src": "1554:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sub",
                                  "referencedDeclaration": 5338,
                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4764,
                                      "type": "uint256",
                                      "value": "leftSide"
                                    },
                                    "id": 4813,
                                    "name": "Identifier",
                                    "src": "1565:8:11"
                                  }
                                ],
                                "id": 4814,
                                "name": "MemberAccess",
                                "src": "1565:12:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4789,
                                  "type": "uint256",
                                  "value": "rightSide"
                                },
                                "id": 4815,
                                "name": "Identifier",
                                "src": "1578:9:11"
                              }
                            ],
                            "id": 4816,
                            "name": "FunctionCall",
                            "src": "1565:23:11"
                          }
                        ],
                        "id": 4817,
                        "name": "Assignment",
                        "src": "1554:34:11"
                      }
                    ],
                    "id": 4818,
                    "name": "ExpressionStatement",
                    "src": "1554:34:11"
                  }
                ],
                "id": 4819,
                "name": "Block",
                "src": "906:689:11"
              }
            ],
            "id": 4820,
            "name": "FunctionDefinition",
            "src": "692:903:11"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getReservesAfterArbitrage",
              "overrides": null,
              "scope": 5185,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "factory",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4821,
                        "name": "ElementaryTypeName",
                        "src": "1776:7:11"
                      }
                    ],
                    "id": 4822,
                    "name": "VariableDeclaration",
                    "src": "1776:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4823,
                        "name": "ElementaryTypeName",
                        "src": "1801:7:11"
                      }
                    ],
                    "id": 4824,
                    "name": "VariableDeclaration",
                    "src": "1801:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 4825,
                        "name": "ElementaryTypeName",
                        "src": "1825:7:11"
                      }
                    ],
                    "id": 4826,
                    "name": "VariableDeclaration",
                    "src": "1825:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenA",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4827,
                        "name": "ElementaryTypeName",
                        "src": "1849:7:11"
                      }
                    ],
                    "id": 4828,
                    "name": "VariableDeclaration",
                    "src": "1849:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenB",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4829,
                        "name": "ElementaryTypeName",
                        "src": "1882:7:11"
                      }
                    ],
                    "id": 4830,
                    "name": "VariableDeclaration",
                    "src": "1882:23:11"
                  }
                ],
                "id": 4831,
                "name": "ParameterList",
                "src": "1766:145:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveA",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4832,
                        "name": "ElementaryTypeName",
                        "src": "1935:7:11"
                      }
                    ],
                    "id": 4833,
                    "name": "VariableDeclaration",
                    "src": "1935:16:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reserveB",
                      "overrides": null,
                      "scope": 4918,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4834,
                        "name": "ElementaryTypeName",
                        "src": "1953:7:11"
                      }
                    ],
                    "id": 4835,
                    "name": "VariableDeclaration",
                    "src": "1953:16:11"
                  }
                ],
                "id": 4836,
                "name": "ParameterList",
                "src": "1934:36:11"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "tuple(uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4833,
                                  "type": "uint256",
                                  "value": "reserveA"
                                },
                                "id": 4837,
                                "name": "Identifier",
                                "src": "2028:8:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4835,
                                  "type": "uint256",
                                  "value": "reserveB"
                                },
                                "id": 4838,
                                "name": "Identifier",
                                "src": "2038:8:11"
                              }
                            ],
                            "id": 4839,
                            "name": "TupleExpression",
                            "src": "2027:20:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "tuple(uint256,uint256)",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "getReserves",
                                  "referencedDeclaration": 4393,
                                  "type": "function (address,address,address) view returns (uint256,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 4840,
                                    "name": "Identifier",
                                    "src": "2050:23:11"
                                  }
                                ],
                                "id": 4841,
                                "name": "MemberAccess",
                                "src": "2050:35:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4822,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 4842,
                                "name": "Identifier",
                                "src": "2086:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4824,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 4843,
                                "name": "Identifier",
                                "src": "2095:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4826,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 4844,
                                "name": "Identifier",
                                "src": "2103:6:11"
                              }
                            ],
                            "id": 4845,
                            "name": "FunctionCall",
                            "src": "2050:60:11"
                          }
                        ],
                        "id": 4846,
                        "name": "Assignment",
                        "src": "2027:83:11"
                      }
                    ],
                    "id": 4847,
                    "name": "ExpressionStatement",
                    "src": "2027:83:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_27406bd9bdc445ccba30d2adb517cd208f3e263291844f68b475b6c70126e9c0",
                                  "typeString": "literal_string \"MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 4848,
                            "name": "Identifier",
                            "src": "2121:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4849,
                                    "name": "Identifier",
                                    "src": "2129:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4850,
                                    "name": "Literal",
                                    "src": "2140:1:11"
                                  }
                                ],
                                "id": 4851,
                                "name": "BinaryOperation",
                                "src": "2129:12:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4852,
                                    "name": "Identifier",
                                    "src": "2145:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 4853,
                                    "name": "Literal",
                                    "src": "2156:1:11"
                                  }
                                ],
                                "id": 4854,
                                "name": "BinaryOperation",
                                "src": "2145:12:11"
                              }
                            ],
                            "id": 4855,
                            "name": "BinaryOperation",
                            "src": "2129:28:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "4d6f6f6e77616c6b65727377617056324172626974726167654c6962726172793a205a45524f5f504149525f5245534552564553",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES\"",
                              "value": "MoonwalkerswapV2ArbitrageLibrary: ZERO_PAIR_RESERVES"
                            },
                            "id": 4856,
                            "name": "Literal",
                            "src": "2159:54:11"
                          }
                        ],
                        "id": 4857,
                        "name": "FunctionCall",
                        "src": "2121:93:11"
                      }
                    ],
                    "id": 4858,
                    "name": "ExpressionStatement",
                    "src": "2121:93:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        4860,
                        4862
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "aToB",
                          "overrides": null,
                          "scope": 4917,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 4859,
                            "name": "ElementaryTypeName",
                            "src": "2292:4:11"
                          }
                        ],
                        "id": 4860,
                        "name": "VariableDeclaration",
                        "src": "2292:9:11"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "amountIn",
                          "overrides": null,
                          "scope": 4917,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 4861,
                            "name": "ElementaryTypeName",
                            "src": "2303:7:11"
                          }
                        ],
                        "id": 4862,
                        "name": "VariableDeclaration",
                        "src": "2303:16:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(bool,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4820,
                              "type": "function (uint256,uint256,uint256,uint256) pure returns (bool,uint256)",
                              "value": "computeProfitMaximizingTrade"
                            },
                            "id": 4863,
                            "name": "Identifier",
                            "src": "2323:28:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4828,
                              "type": "uint256",
                              "value": "truePriceTokenA"
                            },
                            "id": 4864,
                            "name": "Identifier",
                            "src": "2352:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4830,
                              "type": "uint256",
                              "value": "truePriceTokenB"
                            },
                            "id": 4865,
                            "name": "Identifier",
                            "src": "2369:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4833,
                              "type": "uint256",
                              "value": "reserveA"
                            },
                            "id": 4866,
                            "name": "Identifier",
                            "src": "2386:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4835,
                              "type": "uint256",
                              "value": "reserveB"
                            },
                            "id": 4867,
                            "name": "Identifier",
                            "src": "2396:8:11"
                          }
                        ],
                        "id": 4868,
                        "name": "FunctionCall",
                        "src": "2323:82:11"
                      }
                    ],
                    "id": 4869,
                    "name": "VariableDeclarationStatement",
                    "src": "2291:114:11"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4862,
                              "type": "uint256",
                              "value": "amountIn"
                            },
                            "id": 4870,
                            "name": "Identifier",
                            "src": "2420:8:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 4871,
                            "name": "Literal",
                            "src": "2432:1:11"
                          }
                        ],
                        "id": 4872,
                        "name": "BinaryOperation",
                        "src": "2420:13:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 4836
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "tuple(uint256,uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4873,
                                    "name": "Identifier",
                                    "src": "2457:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4874,
                                    "name": "Identifier",
                                    "src": "2467:8:11"
                                  }
                                ],
                                "id": 4875,
                                "name": "TupleExpression",
                                "src": "2456:20:11"
                              }
                            ],
                            "id": 4876,
                            "name": "Return",
                            "src": "2449:27:11"
                          }
                        ],
                        "id": 4877,
                        "name": "Block",
                        "src": "2435:52:11"
                      }
                    ],
                    "id": 4878,
                    "name": "IfStatement",
                    "src": "2416:71:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 4860,
                          "type": "bool",
                          "value": "aToB"
                        },
                        "id": 4879,
                        "name": "Identifier",
                        "src": "2549:4:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                4881
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amountOut",
                                  "overrides": null,
                                  "scope": 4897,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 4880,
                                    "name": "ElementaryTypeName",
                                    "src": "2569:4:11"
                                  }
                                ],
                                "id": 4881,
                                "name": "VariableDeclaration",
                                "src": "2569:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getAmountOut",
                                      "referencedDeclaration": 4492,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 4882,
                                        "name": "Identifier",
                                        "src": "2586:23:11"
                                      }
                                    ],
                                    "id": 4883,
                                    "name": "MemberAccess",
                                    "src": "2586:36:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4862,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 4884,
                                    "name": "Identifier",
                                    "src": "2623:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4885,
                                    "name": "Identifier",
                                    "src": "2633:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4886,
                                    "name": "Identifier",
                                    "src": "2643:8:11"
                                  }
                                ],
                                "id": 4887,
                                "name": "FunctionCall",
                                "src": "2586:66:11"
                              }
                            ],
                            "id": 4888,
                            "name": "VariableDeclarationStatement",
                            "src": "2569:83:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4889,
                                    "name": "Identifier",
                                    "src": "2666:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4862,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 4890,
                                    "name": "Identifier",
                                    "src": "2678:8:11"
                                  }
                                ],
                                "id": 4891,
                                "name": "Assignment",
                                "src": "2666:20:11"
                              }
                            ],
                            "id": 4892,
                            "name": "ExpressionStatement",
                            "src": "2666:20:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4893,
                                    "name": "Identifier",
                                    "src": "2700:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4881,
                                      "type": "uint256",
                                      "value": "amountOut"
                                    },
                                    "id": 4894,
                                    "name": "Identifier",
                                    "src": "2712:9:11"
                                  }
                                ],
                                "id": 4895,
                                "name": "Assignment",
                                "src": "2700:21:11"
                              }
                            ],
                            "id": 4896,
                            "name": "ExpressionStatement",
                            "src": "2700:21:11"
                          }
                        ],
                        "id": 4897,
                        "name": "Block",
                        "src": "2555:177:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                4899
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "amountOut",
                                  "overrides": null,
                                  "scope": 4915,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 4898,
                                    "name": "ElementaryTypeName",
                                    "src": "2752:4:11"
                                  }
                                ],
                                "id": 4899,
                                "name": "VariableDeclaration",
                                "src": "2752:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "getAmountOut",
                                      "referencedDeclaration": 4492,
                                      "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4719,
                                          "type": "type(library MoonwalkerswapV2Library)",
                                          "value": "MoonwalkerswapV2Library"
                                        },
                                        "id": 4900,
                                        "name": "Identifier",
                                        "src": "2769:23:11"
                                      }
                                    ],
                                    "id": 4901,
                                    "name": "MemberAccess",
                                    "src": "2769:36:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4862,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 4902,
                                    "name": "Identifier",
                                    "src": "2806:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4903,
                                    "name": "Identifier",
                                    "src": "2816:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4904,
                                    "name": "Identifier",
                                    "src": "2826:8:11"
                                  }
                                ],
                                "id": 4905,
                                "name": "FunctionCall",
                                "src": "2769:66:11"
                              }
                            ],
                            "id": 4906,
                            "name": "VariableDeclarationStatement",
                            "src": "2752:83:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "+=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4835,
                                      "type": "uint256",
                                      "value": "reserveB"
                                    },
                                    "id": 4907,
                                    "name": "Identifier",
                                    "src": "2849:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4862,
                                      "type": "uint256",
                                      "value": "amountIn"
                                    },
                                    "id": 4908,
                                    "name": "Identifier",
                                    "src": "2861:8:11"
                                  }
                                ],
                                "id": 4909,
                                "name": "Assignment",
                                "src": "2849:20:11"
                              }
                            ],
                            "id": 4910,
                            "name": "ExpressionStatement",
                            "src": "2849:20:11"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-=",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4833,
                                      "type": "uint256",
                                      "value": "reserveA"
                                    },
                                    "id": 4911,
                                    "name": "Identifier",
                                    "src": "2883:8:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4899,
                                      "type": "uint256",
                                      "value": "amountOut"
                                    },
                                    "id": 4912,
                                    "name": "Identifier",
                                    "src": "2895:9:11"
                                  }
                                ],
                                "id": 4913,
                                "name": "Assignment",
                                "src": "2883:21:11"
                              }
                            ],
                            "id": 4914,
                            "name": "ExpressionStatement",
                            "src": "2883:21:11"
                          }
                        ],
                        "id": 4915,
                        "name": "Block",
                        "src": "2738:177:11"
                      }
                    ],
                    "id": 4916,
                    "name": "IfStatement",
                    "src": "2545:370:11"
                  }
                ],
                "id": 4917,
                "name": "Block",
                "src": "1971:950:11"
              }
            ],
            "id": 4918,
            "name": "FunctionDefinition",
            "src": "1732:1189:11"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "computeLiquidityValue",
              "overrides": null,
              "scope": 5185,
              "stateMutability": "pure",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reservesA",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4919,
                        "name": "ElementaryTypeName",
                        "src": "3036:7:11"
                      }
                    ],
                    "id": 4920,
                    "name": "VariableDeclaration",
                    "src": "3036:17:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "reservesB",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4921,
                        "name": "ElementaryTypeName",
                        "src": "3063:7:11"
                      }
                    ],
                    "id": 4922,
                    "name": "VariableDeclaration",
                    "src": "3063:17:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "totalSupply",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4923,
                        "name": "ElementaryTypeName",
                        "src": "3090:7:11"
                      }
                    ],
                    "id": 4924,
                    "name": "VariableDeclaration",
                    "src": "3090:19:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidityAmount",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4925,
                        "name": "ElementaryTypeName",
                        "src": "3119:7:11"
                      }
                    ],
                    "id": 4926,
                    "name": "VariableDeclaration",
                    "src": "3119:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "feeOn",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4927,
                        "name": "ElementaryTypeName",
                        "src": "3152:4:11"
                      }
                    ],
                    "id": 4928,
                    "name": "VariableDeclaration",
                    "src": "3152:10:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "kLast",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 4929,
                        "name": "ElementaryTypeName",
                        "src": "3172:4:11"
                      }
                    ],
                    "id": 4930,
                    "name": "VariableDeclaration",
                    "src": "3172:10:11"
                  }
                ],
                "id": 4931,
                "name": "ParameterList",
                "src": "3026:162:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAAmount",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4932,
                        "name": "ElementaryTypeName",
                        "src": "3212:7:11"
                      }
                    ],
                    "id": 4933,
                    "name": "VariableDeclaration",
                    "src": "3212:20:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenBAmount",
                      "overrides": null,
                      "scope": 5018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 4934,
                        "name": "ElementaryTypeName",
                        "src": "3234:7:11"
                      }
                    ],
                    "id": 4935,
                    "name": "VariableDeclaration",
                    "src": "3234:20:11"
                  }
                ],
                "id": 4936,
                "name": "ParameterList",
                "src": "3211:44:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4928,
                              "type": "bool",
                              "value": "feeOn"
                            },
                            "id": 4937,
                            "name": "Identifier",
                            "src": "3270:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": ">",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4930,
                                  "type": "uint256",
                                  "value": "kLast"
                                },
                                "id": 4938,
                                "name": "Identifier",
                                "src": "3279:5:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 4939,
                                "name": "Literal",
                                "src": "3287:1:11"
                              }
                            ],
                            "id": 4940,
                            "name": "BinaryOperation",
                            "src": "3279:9:11"
                          }
                        ],
                        "id": 4941,
                        "name": "BinaryOperation",
                        "src": "3270:18:11"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                4943
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "rootK",
                                  "overrides": null,
                                  "scope": 5001,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 4942,
                                    "name": "ElementaryTypeName",
                                    "src": "3304:4:11"
                                  }
                                ],
                                "id": 4943,
                                "name": "VariableDeclaration",
                                "src": "3304:10:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sqrt",
                                      "referencedDeclaration": 6950,
                                      "type": "function (uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6951,
                                          "type": "type(library Babylonian)",
                                          "value": "Babylonian"
                                        },
                                        "id": 4944,
                                        "name": "Identifier",
                                        "src": "3317:10:11"
                                      }
                                    ],
                                    "id": 4945,
                                    "name": "MemberAccess",
                                    "src": "3317:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "uint256",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "mul",
                                          "referencedDeclaration": 5366,
                                          "type": "function (uint256,uint256) pure returns (uint256)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4920,
                                              "type": "uint256",
                                              "value": "reservesA"
                                            },
                                            "id": 4946,
                                            "name": "Identifier",
                                            "src": "3333:9:11"
                                          }
                                        ],
                                        "id": 4947,
                                        "name": "MemberAccess",
                                        "src": "3333:13:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4922,
                                          "type": "uint256",
                                          "value": "reservesB"
                                        },
                                        "id": 4948,
                                        "name": "Identifier",
                                        "src": "3347:9:11"
                                      }
                                    ],
                                    "id": 4949,
                                    "name": "FunctionCall",
                                    "src": "3333:24:11"
                                  }
                                ],
                                "id": 4950,
                                "name": "FunctionCall",
                                "src": "3317:41:11"
                              }
                            ],
                            "id": 4951,
                            "name": "VariableDeclarationStatement",
                            "src": "3304:54:11"
                          },
                          {
                            "attributes": {
                              "assignments": [
                                4953
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "rootKLast",
                                  "overrides": null,
                                  "scope": 5001,
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "type": "uint256",
                                  "value": null,
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "uint",
                                      "type": "uint256"
                                    },
                                    "id": 4952,
                                    "name": "ElementaryTypeName",
                                    "src": "3372:4:11"
                                  }
                                ],
                                "id": 4953,
                                "name": "VariableDeclaration",
                                "src": "3372:14:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "sqrt",
                                      "referencedDeclaration": 6950,
                                      "type": "function (uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6951,
                                          "type": "type(library Babylonian)",
                                          "value": "Babylonian"
                                        },
                                        "id": 4954,
                                        "name": "Identifier",
                                        "src": "3389:10:11"
                                      }
                                    ],
                                    "id": 4955,
                                    "name": "MemberAccess",
                                    "src": "3389:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4930,
                                      "type": "uint256",
                                      "value": "kLast"
                                    },
                                    "id": 4956,
                                    "name": "Identifier",
                                    "src": "3405:5:11"
                                  }
                                ],
                                "id": 4957,
                                "name": "FunctionCall",
                                "src": "3389:22:11"
                              }
                            ],
                            "id": 4958,
                            "name": "VariableDeclarationStatement",
                            "src": "3372:39:11"
                          },
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4943,
                                      "type": "uint256",
                                      "value": "rootK"
                                    },
                                    "id": 4959,
                                    "name": "Identifier",
                                    "src": "3429:5:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4953,
                                      "type": "uint256",
                                      "value": "rootKLast"
                                    },
                                    "id": 4960,
                                    "name": "Identifier",
                                    "src": "3437:9:11"
                                  }
                                ],
                                "id": 4961,
                                "name": "BinaryOperation",
                                "src": "3429:17:11"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4963
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "numerator1",
                                          "overrides": null,
                                          "scope": 4999,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 4962,
                                            "name": "ElementaryTypeName",
                                            "src": "3466:4:11"
                                          }
                                        ],
                                        "id": 4963,
                                        "name": "VariableDeclaration",
                                        "src": "3466:15:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4924,
                                          "type": "uint256",
                                          "value": "totalSupply"
                                        },
                                        "id": 4964,
                                        "name": "Identifier",
                                        "src": "3484:11:11"
                                      }
                                    ],
                                    "id": 4965,
                                    "name": "VariableDeclarationStatement",
                                    "src": "3466:29:11"
                                  },
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4967
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "numerator2",
                                          "overrides": null,
                                          "scope": 4999,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 4966,
                                            "name": "ElementaryTypeName",
                                            "src": "3513:4:11"
                                          }
                                        ],
                                        "id": 4967,
                                        "name": "VariableDeclaration",
                                        "src": "3513:15:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sub",
                                              "referencedDeclaration": 5338,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4943,
                                                  "type": "uint256",
                                                  "value": "rootK"
                                                },
                                                "id": 4968,
                                                "name": "Identifier",
                                                "src": "3531:5:11"
                                              }
                                            ],
                                            "id": 4969,
                                            "name": "MemberAccess",
                                            "src": "3531:9:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4953,
                                              "type": "uint256",
                                              "value": "rootKLast"
                                            },
                                            "id": 4970,
                                            "name": "Identifier",
                                            "src": "3541:9:11"
                                          }
                                        ],
                                        "id": 4971,
                                        "name": "FunctionCall",
                                        "src": "3531:20:11"
                                      }
                                    ],
                                    "id": 4972,
                                    "name": "VariableDeclarationStatement",
                                    "src": "3513:38:11"
                                  },
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4974
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "denominator",
                                          "overrides": null,
                                          "scope": 4999,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 4973,
                                            "name": "ElementaryTypeName",
                                            "src": "3569:4:11"
                                          }
                                        ],
                                        "id": 4974,
                                        "name": "VariableDeclaration",
                                        "src": "3569:16:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "add",
                                              "referencedDeclaration": 5316,
                                              "type": "function (uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "tryCall": false,
                                                  "type": "uint256",
                                                  "type_conversion": false
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_rational_5_by_1",
                                                          "typeString": "int_const 5"
                                                        }
                                                      ],
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "mul",
                                                      "referencedDeclaration": 5366,
                                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 4943,
                                                          "type": "uint256",
                                                          "value": "rootK"
                                                        },
                                                        "id": 4975,
                                                        "name": "Identifier",
                                                        "src": "3588:5:11"
                                                      }
                                                    ],
                                                    "id": 4976,
                                                    "name": "MemberAccess",
                                                    "src": "3588:9:11"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "hexvalue": "35",
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": true,
                                                      "lValueRequested": false,
                                                      "subdenomination": null,
                                                      "token": "number",
                                                      "type": "int_const 5",
                                                      "value": "5"
                                                    },
                                                    "id": 4977,
                                                    "name": "Literal",
                                                    "src": "3598:1:11"
                                                  }
                                                ],
                                                "id": 4978,
                                                "name": "FunctionCall",
                                                "src": "3588:12:11"
                                              }
                                            ],
                                            "id": 4979,
                                            "name": "MemberAccess",
                                            "src": "3588:16:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4953,
                                              "type": "uint256",
                                              "value": "rootKLast"
                                            },
                                            "id": 4980,
                                            "name": "Identifier",
                                            "src": "3605:9:11"
                                          }
                                        ],
                                        "id": 4981,
                                        "name": "FunctionCall",
                                        "src": "3588:27:11"
                                      }
                                    ],
                                    "id": 4982,
                                    "name": "VariableDeclarationStatement",
                                    "src": "3569:46:11"
                                  },
                                  {
                                    "attributes": {
                                      "assignments": [
                                        4984
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "mutability": "mutable",
                                          "name": "feeLiquidity",
                                          "overrides": null,
                                          "scope": 4999,
                                          "stateVariable": false,
                                          "storageLocation": "default",
                                          "type": "uint256",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "name": "uint",
                                              "type": "uint256"
                                            },
                                            "id": 4983,
                                            "name": "ElementaryTypeName",
                                            "src": "3633:4:11"
                                          }
                                        ],
                                        "id": 4984,
                                        "name": "VariableDeclaration",
                                        "src": "3633:17:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "mulDiv",
                                              "referencedDeclaration": 8078,
                                              "type": "function (uint256,uint256,uint256) pure returns (uint256)"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 8079,
                                                  "type": "type(library FullMath)",
                                                  "value": "FullMath"
                                                },
                                                "id": 4985,
                                                "name": "Identifier",
                                                "src": "3653:8:11"
                                              }
                                            ],
                                            "id": 4986,
                                            "name": "MemberAccess",
                                            "src": "3653:15:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4963,
                                              "type": "uint256",
                                              "value": "numerator1"
                                            },
                                            "id": 4987,
                                            "name": "Identifier",
                                            "src": "3669:10:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4967,
                                              "type": "uint256",
                                              "value": "numerator2"
                                            },
                                            "id": 4988,
                                            "name": "Identifier",
                                            "src": "3681:10:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4974,
                                              "type": "uint256",
                                              "value": "denominator"
                                            },
                                            "id": 4989,
                                            "name": "Identifier",
                                            "src": "3693:11:11"
                                          }
                                        ],
                                        "id": 4990,
                                        "name": "FunctionCall",
                                        "src": "3653:52:11"
                                      }
                                    ],
                                    "id": 4991,
                                    "name": "VariableDeclarationStatement",
                                    "src": "3633:72:11"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4924,
                                              "type": "uint256",
                                              "value": "totalSupply"
                                            },
                                            "id": 4992,
                                            "name": "Identifier",
                                            "src": "3723:11:11"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "isStructConstructorCall": false,
                                              "lValueRequested": false,
                                              "names": [
                                                null
                                              ],
                                              "tryCall": false,
                                              "type": "uint256",
                                              "type_conversion": false
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": [
                                                    {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  ],
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "add",
                                                  "referencedDeclaration": 5316,
                                                  "type": "function (uint256,uint256) pure returns (uint256)"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 4924,
                                                      "type": "uint256",
                                                      "value": "totalSupply"
                                                    },
                                                    "id": 4993,
                                                    "name": "Identifier",
                                                    "src": "3737:11:11"
                                                  }
                                                ],
                                                "id": 4994,
                                                "name": "MemberAccess",
                                                "src": "3737:15:11"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 4984,
                                                  "type": "uint256",
                                                  "value": "feeLiquidity"
                                                },
                                                "id": 4995,
                                                "name": "Identifier",
                                                "src": "3753:12:11"
                                              }
                                            ],
                                            "id": 4996,
                                            "name": "FunctionCall",
                                            "src": "3737:29:11"
                                          }
                                        ],
                                        "id": 4997,
                                        "name": "Assignment",
                                        "src": "3723:43:11"
                                      }
                                    ],
                                    "id": 4998,
                                    "name": "ExpressionStatement",
                                    "src": "3723:43:11"
                                  }
                                ],
                                "id": 4999,
                                "name": "Block",
                                "src": "3448:333:11"
                              }
                            ],
                            "id": 5000,
                            "name": "IfStatement",
                            "src": "3425:356:11"
                          }
                        ],
                        "id": 5001,
                        "name": "Block",
                        "src": "3290:501:11"
                      }
                    ],
                    "id": 5002,
                    "name": "IfStatement",
                    "src": "3266:525:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4936
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "tuple(uint256,uint256)"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5366,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4920,
                                          "type": "uint256",
                                          "value": "reservesA"
                                        },
                                        "id": 5003,
                                        "name": "Identifier",
                                        "src": "3808:9:11"
                                      }
                                    ],
                                    "id": 5004,
                                    "name": "MemberAccess",
                                    "src": "3808:13:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4926,
                                      "type": "uint256",
                                      "value": "liquidityAmount"
                                    },
                                    "id": 5005,
                                    "name": "Identifier",
                                    "src": "3822:15:11"
                                  }
                                ],
                                "id": 5006,
                                "name": "FunctionCall",
                                "src": "3808:30:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4924,
                                  "type": "uint256",
                                  "value": "totalSupply"
                                },
                                "id": 5007,
                                "name": "Identifier",
                                "src": "3841:11:11"
                              }
                            ],
                            "id": 5008,
                            "name": "BinaryOperation",
                            "src": "3808:44:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "/",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "mul",
                                      "referencedDeclaration": 5366,
                                      "type": "function (uint256,uint256) pure returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4922,
                                          "type": "uint256",
                                          "value": "reservesB"
                                        },
                                        "id": 5009,
                                        "name": "Identifier",
                                        "src": "3854:9:11"
                                      }
                                    ],
                                    "id": 5010,
                                    "name": "MemberAccess",
                                    "src": "3854:13:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4926,
                                      "type": "uint256",
                                      "value": "liquidityAmount"
                                    },
                                    "id": 5011,
                                    "name": "Identifier",
                                    "src": "3868:15:11"
                                  }
                                ],
                                "id": 5012,
                                "name": "FunctionCall",
                                "src": "3854:30:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4924,
                                  "type": "uint256",
                                  "value": "totalSupply"
                                },
                                "id": 5013,
                                "name": "Identifier",
                                "src": "3887:11:11"
                              }
                            ],
                            "id": 5014,
                            "name": "BinaryOperation",
                            "src": "3854:44:11"
                          }
                        ],
                        "id": 5015,
                        "name": "TupleExpression",
                        "src": "3807:92:11"
                      }
                    ],
                    "id": 5016,
                    "name": "Return",
                    "src": "3800:99:11"
                  }
                ],
                "id": 5017,
                "name": "Block",
                "src": "3256:650:11"
              }
            ],
            "id": 5018,
            "name": "FunctionDefinition",
            "src": "2996:910:11"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getLiquidityValue",
              "overrides": null,
              "scope": 5185,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "factory",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5019,
                        "name": "ElementaryTypeName",
                        "src": "4204:7:11"
                      }
                    ],
                    "id": 5020,
                    "name": "VariableDeclaration",
                    "src": "4204:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5021,
                        "name": "ElementaryTypeName",
                        "src": "4229:7:11"
                      }
                    ],
                    "id": 5022,
                    "name": "VariableDeclaration",
                    "src": "4229:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5023,
                        "name": "ElementaryTypeName",
                        "src": "4253:7:11"
                      }
                    ],
                    "id": 5024,
                    "name": "VariableDeclaration",
                    "src": "4253:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidityAmount",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5025,
                        "name": "ElementaryTypeName",
                        "src": "4277:7:11"
                      }
                    ],
                    "id": 5026,
                    "name": "VariableDeclaration",
                    "src": "4277:23:11"
                  }
                ],
                "id": 5027,
                "name": "ParameterList",
                "src": "4194:112:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAAmount",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5028,
                        "name": "ElementaryTypeName",
                        "src": "4330:7:11"
                      }
                    ],
                    "id": 5029,
                    "name": "VariableDeclaration",
                    "src": "4330:20:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenBAmount",
                      "overrides": null,
                      "scope": 5093,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5030,
                        "name": "ElementaryTypeName",
                        "src": "4352:7:11"
                      }
                    ],
                    "id": 5031,
                    "name": "VariableDeclaration",
                    "src": "4352:20:11"
                  }
                ],
                "id": 5032,
                "name": "ParameterList",
                "src": "4329:44:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5034,
                        5036
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reservesA",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5033,
                            "name": "ElementaryTypeName",
                            "src": "4385:7:11"
                          }
                        ],
                        "id": 5034,
                        "name": "VariableDeclaration",
                        "src": "4385:17:11"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reservesB",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5035,
                            "name": "ElementaryTypeName",
                            "src": "4404:7:11"
                          }
                        ],
                        "id": 5036,
                        "name": "VariableDeclaration",
                        "src": "4404:17:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "getReserves",
                              "referencedDeclaration": 4393,
                              "type": "function (address,address,address) view returns (uint256,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4719,
                                  "type": "type(library MoonwalkerswapV2Library)",
                                  "value": "MoonwalkerswapV2Library"
                                },
                                "id": 5037,
                                "name": "Identifier",
                                "src": "4425:23:11"
                              }
                            ],
                            "id": 5038,
                            "name": "MemberAccess",
                            "src": "4425:35:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5020,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 5039,
                            "name": "Identifier",
                            "src": "4461:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5022,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 5040,
                            "name": "Identifier",
                            "src": "4470:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5024,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 5041,
                            "name": "Identifier",
                            "src": "4478:6:11"
                          }
                        ],
                        "id": 5042,
                        "name": "FunctionCall",
                        "src": "4425:60:11"
                      }
                    ],
                    "id": 5043,
                    "name": "VariableDeclarationStatement",
                    "src": "4384:101:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5045
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IMoonwalkerPair",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IMoonwalkerPair",
                              "referencedDeclaration": 8544,
                              "type": "contract IMoonwalkerPair"
                            },
                            "id": 5044,
                            "name": "UserDefinedTypeName",
                            "src": "4495:15:11"
                          }
                        ],
                        "id": 5045,
                        "name": "VariableDeclaration",
                        "src": "4495:20:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IMoonwalkerPair",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8544,
                              "type": "type(contract IMoonwalkerPair)",
                              "value": "IMoonwalkerPair"
                            },
                            "id": 5046,
                            "name": "Identifier",
                            "src": "4518:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 5047,
                                    "name": "Identifier",
                                    "src": "4534:23:11"
                                  }
                                ],
                                "id": 5048,
                                "name": "MemberAccess",
                                "src": "4534:31:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5020,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 5049,
                                "name": "Identifier",
                                "src": "4566:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5022,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 5050,
                                "name": "Identifier",
                                "src": "4575:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5024,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 5051,
                                "name": "Identifier",
                                "src": "4583:6:11"
                              }
                            ],
                            "id": 5052,
                            "name": "FunctionCall",
                            "src": "4534:56:11"
                          }
                        ],
                        "id": 5053,
                        "name": "FunctionCall",
                        "src": "4518:73:11"
                      }
                    ],
                    "id": 5054,
                    "name": "VariableDeclarationStatement",
                    "src": "4495:96:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5056
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "feeOn",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5055,
                            "name": "ElementaryTypeName",
                            "src": "4601:4:11"
                          }
                        ],
                        "id": 5056,
                        "name": "VariableDeclaration",
                        "src": "4601:10:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "feeTo",
                                  "referencedDeclaration": 8256,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IMoonwalkerFactory",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8302,
                                          "type": "type(contract IMoonwalkerFactory)",
                                          "value": "IMoonwalkerFactory"
                                        },
                                        "id": 5057,
                                        "name": "Identifier",
                                        "src": "4614:18:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5020,
                                          "type": "address",
                                          "value": "factory"
                                        },
                                        "id": 5058,
                                        "name": "Identifier",
                                        "src": "4633:7:11"
                                      }
                                    ],
                                    "id": 5059,
                                    "name": "FunctionCall",
                                    "src": "4614:27:11"
                                  }
                                ],
                                "id": 5060,
                                "name": "MemberAccess",
                                "src": "4614:33:11"
                              }
                            ],
                            "id": 5061,
                            "name": "FunctionCall",
                            "src": "4614:35:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 5062,
                                    "name": "ElementaryTypeName",
                                    "src": "4653:7:11"
                                  }
                                ],
                                "id": 5063,
                                "name": "ElementaryTypeNameExpression",
                                "src": "4653:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5064,
                                "name": "Literal",
                                "src": "4661:1:11"
                              }
                            ],
                            "id": 5065,
                            "name": "FunctionCall",
                            "src": "4653:10:11"
                          }
                        ],
                        "id": 5066,
                        "name": "BinaryOperation",
                        "src": "4614:49:11"
                      }
                    ],
                    "id": 5067,
                    "name": "VariableDeclarationStatement",
                    "src": "4601:62:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5069
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "kLast",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5068,
                            "name": "ElementaryTypeName",
                            "src": "4673:4:11"
                          }
                        ],
                        "id": 5069,
                        "name": "VariableDeclaration",
                        "src": "4673:10:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5056,
                              "type": "bool",
                              "value": "feeOn"
                            },
                            "id": 5070,
                            "name": "Identifier",
                            "src": "4686:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "kLast",
                                  "referencedDeclaration": 8501,
                                  "type": "function () view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5045,
                                      "type": "contract IMoonwalkerPair",
                                      "value": "pair"
                                    },
                                    "id": 5071,
                                    "name": "Identifier",
                                    "src": "4694:4:11"
                                  }
                                ],
                                "id": 5072,
                                "name": "MemberAccess",
                                "src": "4694:10:11"
                              }
                            ],
                            "id": 5073,
                            "name": "FunctionCall",
                            "src": "4694:12:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5074,
                            "name": "Literal",
                            "src": "4709:1:11"
                          }
                        ],
                        "id": 5075,
                        "name": "Conditional",
                        "src": "4686:24:11"
                      }
                    ],
                    "id": 5076,
                    "name": "VariableDeclarationStatement",
                    "src": "4673:37:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5078
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "totalSupply",
                          "overrides": null,
                          "scope": 5092,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5077,
                            "name": "ElementaryTypeName",
                            "src": "4720:4:11"
                          }
                        ],
                        "id": 5078,
                        "name": "VariableDeclaration",
                        "src": "4720:16:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "totalSupply",
                              "referencedDeclaration": 8340,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5045,
                                  "type": "contract IMoonwalkerPair",
                                  "value": "pair"
                                },
                                "id": 5079,
                                "name": "Identifier",
                                "src": "4739:4:11"
                              }
                            ],
                            "id": 5080,
                            "name": "MemberAccess",
                            "src": "4739:16:11"
                          }
                        ],
                        "id": 5081,
                        "name": "FunctionCall",
                        "src": "4739:18:11"
                      }
                    ],
                    "id": 5082,
                    "name": "VariableDeclarationStatement",
                    "src": "4720:37:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5032
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5018,
                              "type": "function (uint256,uint256,uint256,uint256,bool,uint256) pure returns (uint256,uint256)",
                              "value": "computeLiquidityValue"
                            },
                            "id": 5083,
                            "name": "Identifier",
                            "src": "4774:21:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5034,
                              "type": "uint256",
                              "value": "reservesA"
                            },
                            "id": 5084,
                            "name": "Identifier",
                            "src": "4796:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5036,
                              "type": "uint256",
                              "value": "reservesB"
                            },
                            "id": 5085,
                            "name": "Identifier",
                            "src": "4807:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5078,
                              "type": "uint256",
                              "value": "totalSupply"
                            },
                            "id": 5086,
                            "name": "Identifier",
                            "src": "4818:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5026,
                              "type": "uint256",
                              "value": "liquidityAmount"
                            },
                            "id": 5087,
                            "name": "Identifier",
                            "src": "4831:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5056,
                              "type": "bool",
                              "value": "feeOn"
                            },
                            "id": 5088,
                            "name": "Identifier",
                            "src": "4848:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5069,
                              "type": "uint256",
                              "value": "kLast"
                            },
                            "id": 5089,
                            "name": "Identifier",
                            "src": "4855:5:11"
                          }
                        ],
                        "id": 5090,
                        "name": "FunctionCall",
                        "src": "4774:87:11"
                      }
                    ],
                    "id": 5091,
                    "name": "Return",
                    "src": "4767:94:11"
                  }
                ],
                "id": 5092,
                "name": "Block",
                "src": "4374:494:11"
              }
            ],
            "id": 5093,
            "name": "FunctionDefinition",
            "src": "4168:700:11"
          },
          {
            "attributes": {
              "documentation": null,
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getLiquidityValueAfterArbitrageToPrice",
              "overrides": null,
              "scope": 5185,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "factory",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5094,
                        "name": "ElementaryTypeName",
                        "src": "5151:7:11"
                      }
                    ],
                    "id": 5095,
                    "name": "VariableDeclaration",
                    "src": "5151:15:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenA",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5096,
                        "name": "ElementaryTypeName",
                        "src": "5176:7:11"
                      }
                    ],
                    "id": 5097,
                    "name": "VariableDeclaration",
                    "src": "5176:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenB",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5098,
                        "name": "ElementaryTypeName",
                        "src": "5200:7:11"
                      }
                    ],
                    "id": 5099,
                    "name": "VariableDeclaration",
                    "src": "5200:14:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenA",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5100,
                        "name": "ElementaryTypeName",
                        "src": "5224:7:11"
                      }
                    ],
                    "id": 5101,
                    "name": "VariableDeclaration",
                    "src": "5224:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "truePriceTokenB",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5102,
                        "name": "ElementaryTypeName",
                        "src": "5257:7:11"
                      }
                    ],
                    "id": 5103,
                    "name": "VariableDeclaration",
                    "src": "5257:23:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "liquidityAmount",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5104,
                        "name": "ElementaryTypeName",
                        "src": "5290:7:11"
                      }
                    ],
                    "id": 5105,
                    "name": "VariableDeclaration",
                    "src": "5290:23:11"
                  }
                ],
                "id": 5106,
                "name": "ParameterList",
                "src": "5141:178:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenAAmount",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5107,
                        "name": "ElementaryTypeName",
                        "src": "5352:7:11"
                      }
                    ],
                    "id": 5108,
                    "name": "VariableDeclaration",
                    "src": "5352:20:11"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenBAmount",
                      "overrides": null,
                      "scope": 5184,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5109,
                        "name": "ElementaryTypeName",
                        "src": "5382:7:11"
                      }
                    ],
                    "id": 5110,
                    "name": "VariableDeclaration",
                    "src": "5382:20:11"
                  }
                ],
                "id": 5111,
                "name": "ParameterList",
                "src": "5342:66:11"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5113
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "feeOn",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bool",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bool",
                              "type": "bool"
                            },
                            "id": 5112,
                            "name": "ElementaryTypeName",
                            "src": "5419:4:11"
                          }
                        ],
                        "id": 5113,
                        "name": "VariableDeclaration",
                        "src": "5419:10:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "feeTo",
                                  "referencedDeclaration": 8256,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "contract IMoonwalkerFactory",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 8302,
                                          "type": "type(contract IMoonwalkerFactory)",
                                          "value": "IMoonwalkerFactory"
                                        },
                                        "id": 5114,
                                        "name": "Identifier",
                                        "src": "5432:18:11"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5095,
                                          "type": "address",
                                          "value": "factory"
                                        },
                                        "id": 5115,
                                        "name": "Identifier",
                                        "src": "5451:7:11"
                                      }
                                    ],
                                    "id": 5116,
                                    "name": "FunctionCall",
                                    "src": "5432:27:11"
                                  }
                                ],
                                "id": 5117,
                                "name": "MemberAccess",
                                "src": "5432:33:11"
                              }
                            ],
                            "id": 5118,
                            "name": "FunctionCall",
                            "src": "5432:35:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address",
                                      "type": null
                                    },
                                    "id": 5119,
                                    "name": "ElementaryTypeName",
                                    "src": "5471:7:11"
                                  }
                                ],
                                "id": 5120,
                                "name": "ElementaryTypeNameExpression",
                                "src": "5471:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 5121,
                                "name": "Literal",
                                "src": "5479:1:11"
                              }
                            ],
                            "id": 5122,
                            "name": "FunctionCall",
                            "src": "5471:10:11"
                          }
                        ],
                        "id": 5123,
                        "name": "BinaryOperation",
                        "src": "5432:49:11"
                      }
                    ],
                    "id": 5124,
                    "name": "VariableDeclarationStatement",
                    "src": "5419:62:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5126
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "pair",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "contract IMoonwalkerPair",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "IMoonwalkerPair",
                              "referencedDeclaration": 8544,
                              "type": "contract IMoonwalkerPair"
                            },
                            "id": 5125,
                            "name": "UserDefinedTypeName",
                            "src": "5491:15:11"
                          }
                        ],
                        "id": 5126,
                        "name": "VariableDeclaration",
                        "src": "5491:20:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "contract IMoonwalkerPair",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 8544,
                              "type": "type(contract IMoonwalkerPair)",
                              "value": "IMoonwalkerPair"
                            },
                            "id": 5127,
                            "name": "Identifier",
                            "src": "5514:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "pairFor",
                                  "referencedDeclaration": 4343,
                                  "type": "function (address,address,address) pure returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4719,
                                      "type": "type(library MoonwalkerswapV2Library)",
                                      "value": "MoonwalkerswapV2Library"
                                    },
                                    "id": 5128,
                                    "name": "Identifier",
                                    "src": "5530:23:11"
                                  }
                                ],
                                "id": 5129,
                                "name": "MemberAccess",
                                "src": "5530:31:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5095,
                                  "type": "address",
                                  "value": "factory"
                                },
                                "id": 5130,
                                "name": "Identifier",
                                "src": "5562:7:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5097,
                                  "type": "address",
                                  "value": "tokenA"
                                },
                                "id": 5131,
                                "name": "Identifier",
                                "src": "5571:6:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5099,
                                  "type": "address",
                                  "value": "tokenB"
                                },
                                "id": 5132,
                                "name": "Identifier",
                                "src": "5579:6:11"
                              }
                            ],
                            "id": 5133,
                            "name": "FunctionCall",
                            "src": "5530:56:11"
                          }
                        ],
                        "id": 5134,
                        "name": "FunctionCall",
                        "src": "5514:73:11"
                      }
                    ],
                    "id": 5135,
                    "name": "VariableDeclarationStatement",
                    "src": "5491:96:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5137
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "kLast",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5136,
                            "name": "ElementaryTypeName",
                            "src": "5597:4:11"
                          }
                        ],
                        "id": 5137,
                        "name": "VariableDeclaration",
                        "src": "5597:10:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5113,
                              "type": "bool",
                              "value": "feeOn"
                            },
                            "id": 5138,
                            "name": "Identifier",
                            "src": "5610:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "uint256",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "kLast",
                                  "referencedDeclaration": 8501,
                                  "type": "function () view external returns (uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5126,
                                      "type": "contract IMoonwalkerPair",
                                      "value": "pair"
                                    },
                                    "id": 5139,
                                    "name": "Identifier",
                                    "src": "5618:4:11"
                                  }
                                ],
                                "id": 5140,
                                "name": "MemberAccess",
                                "src": "5618:10:11"
                              }
                            ],
                            "id": 5141,
                            "name": "FunctionCall",
                            "src": "5618:12:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5142,
                            "name": "Literal",
                            "src": "5633:1:11"
                          }
                        ],
                        "id": 5143,
                        "name": "Conditional",
                        "src": "5610:24:11"
                      }
                    ],
                    "id": 5144,
                    "name": "VariableDeclarationStatement",
                    "src": "5597:37:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5146
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "totalSupply",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5145,
                            "name": "ElementaryTypeName",
                            "src": "5644:4:11"
                          }
                        ],
                        "id": 5146,
                        "name": "VariableDeclaration",
                        "src": "5644:16:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "totalSupply",
                              "referencedDeclaration": 8340,
                              "type": "function () view external returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5126,
                                  "type": "contract IMoonwalkerPair",
                                  "value": "pair"
                                },
                                "id": 5147,
                                "name": "Identifier",
                                "src": "5663:4:11"
                              }
                            ],
                            "id": 5148,
                            "name": "MemberAccess",
                            "src": "5663:16:11"
                          }
                        ],
                        "id": 5149,
                        "name": "FunctionCall",
                        "src": "5663:18:11"
                      }
                    ],
                    "id": 5150,
                    "name": "VariableDeclarationStatement",
                    "src": "5644:37:11"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_eba3c4b4bce1b370b996e883c442849cfe288700c2faa2de6af84d237654e6b8",
                                  "typeString": "literal_string \"ComputeLiquidityValue: LIQUIDITY_AMOUNT\""
                                }
                              ],
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5151,
                            "name": "Identifier",
                            "src": "5741:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">=",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5146,
                                      "type": "uint256",
                                      "value": "totalSupply"
                                    },
                                    "id": 5152,
                                    "name": "Identifier",
                                    "src": "5749:11:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5105,
                                      "type": "uint256",
                                      "value": "liquidityAmount"
                                    },
                                    "id": 5153,
                                    "name": "Identifier",
                                    "src": "5764:15:11"
                                  }
                                ],
                                "id": 5154,
                                "name": "BinaryOperation",
                                "src": "5749:30:11"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": ">",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5105,
                                      "type": "uint256",
                                      "value": "liquidityAmount"
                                    },
                                    "id": 5155,
                                    "name": "Identifier",
                                    "src": "5783:15:11"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 5156,
                                    "name": "Literal",
                                    "src": "5801:1:11"
                                  }
                                ],
                                "id": 5157,
                                "name": "BinaryOperation",
                                "src": "5783:19:11"
                              }
                            ],
                            "id": 5158,
                            "name": "BinaryOperation",
                            "src": "5749:53:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "436f6d707574654c697175696469747956616c75653a204c49515549444954595f414d4f554e54",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "string",
                              "type": "literal_string \"ComputeLiquidityValue: LIQUIDITY_AMOUNT\"",
                              "value": "ComputeLiquidityValue: LIQUIDITY_AMOUNT"
                            },
                            "id": 5159,
                            "name": "Literal",
                            "src": "5804:41:11"
                          }
                        ],
                        "id": 5160,
                        "name": "FunctionCall",
                        "src": "5741:105:11"
                      }
                    ],
                    "id": 5161,
                    "name": "ExpressionStatement",
                    "src": "5741:105:11"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5163,
                        5165
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reservesA",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5162,
                            "name": "ElementaryTypeName",
                            "src": "5858:4:11"
                          }
                        ],
                        "id": 5163,
                        "name": "VariableDeclaration",
                        "src": "5858:14:11"
                      },
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "reservesB",
                          "overrides": null,
                          "scope": 5183,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 5164,
                            "name": "ElementaryTypeName",
                            "src": "5874:4:11"
                          }
                        ],
                        "id": 5165,
                        "name": "VariableDeclaration",
                        "src": "5874:14:11"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4918,
                              "type": "function (address,address,address,uint256,uint256) view returns (uint256,uint256)",
                              "value": "getReservesAfterArbitrage"
                            },
                            "id": 5166,
                            "name": "Identifier",
                            "src": "5892:25:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5095,
                              "type": "address",
                              "value": "factory"
                            },
                            "id": 5167,
                            "name": "Identifier",
                            "src": "5918:7:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5097,
                              "type": "address",
                              "value": "tokenA"
                            },
                            "id": 5168,
                            "name": "Identifier",
                            "src": "5927:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5099,
                              "type": "address",
                              "value": "tokenB"
                            },
                            "id": 5169,
                            "name": "Identifier",
                            "src": "5935:6:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5101,
                              "type": "uint256",
                              "value": "truePriceTokenA"
                            },
                            "id": 5170,
                            "name": "Identifier",
                            "src": "5943:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5103,
                              "type": "uint256",
                              "value": "truePriceTokenB"
                            },
                            "id": 5171,
                            "name": "Identifier",
                            "src": "5960:15:11"
                          }
                        ],
                        "id": 5172,
                        "name": "FunctionCall",
                        "src": "5892:84:11"
                      }
                    ],
                    "id": 5173,
                    "name": "VariableDeclarationStatement",
                    "src": "5857:119:11"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5111
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,uint256)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5018,
                              "type": "function (uint256,uint256,uint256,uint256,bool,uint256) pure returns (uint256,uint256)",
                              "value": "computeLiquidityValue"
                            },
                            "id": 5174,
                            "name": "Identifier",
                            "src": "5994:21:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5163,
                              "type": "uint256",
                              "value": "reservesA"
                            },
                            "id": 5175,
                            "name": "Identifier",
                            "src": "6016:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5165,
                              "type": "uint256",
                              "value": "reservesB"
                            },
                            "id": 5176,
                            "name": "Identifier",
                            "src": "6027:9:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5146,
                              "type": "uint256",
                              "value": "totalSupply"
                            },
                            "id": 5177,
                            "name": "Identifier",
                            "src": "6038:11:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5105,
                              "type": "uint256",
                              "value": "liquidityAmount"
                            },
                            "id": 5178,
                            "name": "Identifier",
                            "src": "6051:15:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5113,
                              "type": "bool",
                              "value": "feeOn"
                            },
                            "id": 5179,
                            "name": "Identifier",
                            "src": "6068:5:11"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5137,
                              "type": "uint256",
                              "value": "kLast"
                            },
                            "id": 5180,
                            "name": "Identifier",
                            "src": "6075:5:11"
                          }
                        ],
                        "id": 5181,
                        "name": "FunctionCall",
                        "src": "5994:87:11"
                      }
                    ],
                    "id": 5182,
                    "name": "Return",
                    "src": "5987:94:11"
                  }
                ],
                "id": 5183,
                "name": "Block",
                "src": "5409:679:11"
              }
            ],
            "id": 5184,
            "name": "FunctionDefinition",
            "src": "5094:994:11"
          }
        ],
        "id": 5185,
        "name": "ContractDefinition",
        "src": "533:5557:11"
      }
    ],
    "id": 5186,
    "name": "SourceUnit",
    "src": "0:6091:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2022-01-17T23:40:22.206Z",
  "devdoc": {
    "methods": {}
  },
  "userdoc": {
    "methods": {}
  }
}