{
  "contractName": "SafeMathExtended",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.6.6+commit.6c089d02\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Unsigned math operations with safety checks that revert on error\",\"methods\":{},\"title\":\"SafeMathExtended\"},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"@iexec/solidity/contracts/Libs/SafeMathExtended.sol\":\"SafeMathExtended\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@iexec/solidity/contracts/Libs/SafeMathExtended.sol\":{\"keccak256\":\"0xf2802ae591eb22954d9c8e02658ae7577940890aff8d8927a7255e254fed605b\",\"urls\":[\"bzz-raw://8dcc485d21a3aa3f643768d4ac4fc69697b9b37f8fb779f3998ab4cee143fa66\",\"dweb:/ipfs/QmWdwgKPMoWuidYQp6WFsJBhNbJUwFHNE9YPYQZhBsKj7e\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122072f895b5018fab4f309b643c158fc547621dc35a85c2dbc376a1594d0487c41064736f6c63430006060033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122072f895b5018fab4f309b643c158fc547621dc35a85c2dbc376a1594d0487c41064736f6c63430006060033",
  "immutableReferences": {},
  "sourceMap": "133:3895:61:-: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": "133:3895:61:-:0;;;;;;12:1:-1;9;2:12",
  "source": "pragma solidity ^0.6.0;\n\n/**\n * @title SafeMathExtended\n * @dev Unsigned math operations with safety checks that revert on error\n */\nlibrary SafeMathExtended\n{\n\t/**\n\t* @dev Adds two unsigned integers, reverts on overflow.\n\t*/\n\tfunction add(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\tuint256 c = a + b;\n\t\trequire(c >= a);\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).\n\t*/\n\tfunction sub(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\trequire(b <= a);\n\t\tuint256 c = a - b;\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Multiplies two unsigned integers, reverts on overflow.\n\t*/\n\tfunction mul(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\t// Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n\t\t// benefit is lost if 'b' is also tested.\n\t\t// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522\n\t\tif (a == 0)\n\t\t{\n\t\t\treturn 0;\n\t\t}\n\t\tuint256 c = a * b;\n\t\trequire(c / a == b);\n\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.\n\t*/\n\tfunction div(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\t\t// Solidity only automatically asserts when dividing by 0\n\t\t\trequire(b > 0);\n\t\t\tuint256 c = a / b;\n\t\t\t// assert(a == b * c + a % b); // There is no case in which this doesn't hold\n\t\t\treturn c;\n\t}\n\n\t/**\n\t* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\n\t* reverts when dividing by zero.\n\t*/\n\tfunction mod(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\trequire(b != 0);\n\t\treturn a % b;\n\t}\n\n\t/**\n\t* @dev Returns the largest of two numbers.\n\t*/\n\tfunction max(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn a >= b ? a : b;\n\t}\n\n\t/**\n\t* @dev Returns the smallest of two numbers.\n\t*/\n\tfunction min(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn a < b ? a : b;\n\t}\n\n\t/**\n\t* @dev Multiplies the a by the fraction b/c\n\t*/\n\tfunction mulByFraction(uint256 a, uint256 b, uint256 c) internal pure returns (uint256)\n\t{\n\t\treturn div(mul(a, b), c);\n\t}\n\n\t/**\n\t* @dev Return b percents of a (equivalent to a percents of b)\n\t*/\n\tfunction percentage(uint256 a, uint256 b) internal pure returns (uint256)\n\t{\n\t\treturn mulByFraction(a, b, 100);\n\t}\n\n\t/**\n\t* @dev Returns the base 2 log of x\n\t* @notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity\n\t*/\n\tfunction log(uint x) internal pure returns (uint y)\n\t{\n\t\tassembly\n\t\t{\n\t\t\tlet arg := x\n\t\t\tx := sub(x,1)\n\t\t\tx := or(x, div(x, 0x02))\n\t\t\tx := or(x, div(x, 0x04))\n\t\t\tx := or(x, div(x, 0x10))\n\t\t\tx := or(x, div(x, 0x100))\n\t\t\tx := or(x, div(x, 0x10000))\n\t\t\tx := or(x, div(x, 0x100000000))\n\t\t\tx := or(x, div(x, 0x10000000000000000))\n\t\t\tx := or(x, div(x, 0x100000000000000000000000000000000))\n\t\t\tx := add(x, 1)\n\t\t\tlet m := mload(0x40)\n\t\t\tmstore(m,           0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd)\n\t\t\tmstore(add(m,0x20), 0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe)\n\t\t\tmstore(add(m,0x40), 0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616)\n\t\t\tmstore(add(m,0x60), 0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff)\n\t\t\tmstore(add(m,0x80), 0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e)\n\t\t\tmstore(add(m,0xa0), 0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707)\n\t\t\tmstore(add(m,0xc0), 0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606)\n\t\t\tmstore(add(m,0xe0), 0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100)\n\t\t\tmstore(0x40, add(m, 0x100))\n\t\t\tlet magic := 0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff\n\t\t\tlet shift := 0x100000000000000000000000000000000000000000000000000000000000000\n\t\t\tlet a := div(mul(x, magic), shift)\n\t\t\ty := div(mload(add(m,sub(255,a))), shift)\n\t\t\ty := add(y, mul(256, gt(arg, 0x8000000000000000000000000000000000000000000000000000000000000000)))\n\t\t}\n\t}\n}\n",
  "sourcePath": "@iexec/solidity/contracts/Libs/SafeMathExtended.sol",
  "ast": {
    "absolutePath": "@iexec/solidity/contracts/Libs/SafeMathExtended.sol",
    "exportedSymbols": {
      "SafeMathExtended": [
        10554
      ]
    },
    "id": 10555,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10338,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:61"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 10339,
          "nodeType": "StructuredDocumentation",
          "src": "25:107:61",
          "text": "@title SafeMathExtended\n@dev Unsigned math operations with safety checks that revert on error"
        },
        "fullyImplemented": true,
        "id": 10554,
        "linearizedBaseContracts": [
          10554
        ],
        "name": "SafeMathExtended",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10363,
              "nodeType": "Block",
              "src": "295:56:61",
              "statements": [
                {
                  "assignments": [
                    10350
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10350,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10363,
                      "src": "299:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10349,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "299:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10354,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10351,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10342,
                      "src": "311:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10352,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10344,
                      "src": "315:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "311:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "299:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10356,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10350,
                          "src": "328:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10357,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10342,
                          "src": "333:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "328:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10355,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "320:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "320:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10360,
                  "nodeType": "ExpressionStatement",
                  "src": "320:15:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10361,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10350,
                    "src": "346:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10348,
                  "id": 10362,
                  "nodeType": "Return",
                  "src": "339:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10340,
              "nodeType": "StructuredDocumentation",
              "src": "161:64:61",
              "text": "@dev Adds two unsigned integers, reverts on overflow."
            },
            "id": 10364,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10342,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "240:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "240:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10344,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "251:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "251:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "239:22:61"
            },
            "returnParameters": {
              "id": 10348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10347,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "285:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "285:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "284:9:61"
            },
            "scope": 10554,
            "src": "227:124:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10388,
              "nodeType": "Block",
              "src": "538:56:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10375,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10369,
                          "src": "550:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10376,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10367,
                          "src": "555:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "550:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10374,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "542:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "542:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10379,
                  "nodeType": "ExpressionStatement",
                  "src": "542:15:61"
                },
                {
                  "assignments": [
                    10381
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10381,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10388,
                      "src": "561:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10380,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "561:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10385,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10382,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10367,
                      "src": "573:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10383,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10369,
                      "src": "577:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "573:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "561:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10386,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10381,
                    "src": "589:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10373,
                  "id": 10387,
                  "nodeType": "Return",
                  "src": "582:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10365,
              "nodeType": "StructuredDocumentation",
              "src": "354:114:61",
              "text": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend)."
            },
            "id": 10389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sub",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10367,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "483:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "483:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10369,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "494:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "494:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "482:22:61"
            },
            "returnParameters": {
              "id": 10373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10372,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "528:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10371,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "528:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "527:9:61"
            },
            "scope": 10554,
            "src": "470:124:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10422,
              "nodeType": "Block",
              "src": "737:294:61",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10399,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10392,
                      "src": "944:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 10400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "949:1:61",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "944:6:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 10405,
                  "nodeType": "IfStatement",
                  "src": "940:32:61",
                  "trueBody": {
                    "id": 10404,
                    "nodeType": "Block",
                    "src": "954:18:61",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "966:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 10398,
                        "id": 10403,
                        "nodeType": "Return",
                        "src": "959:8:61"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    10407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10407,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10422,
                      "src": "975:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10406,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "975:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10411,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10408,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10392,
                      "src": "987:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10409,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10394,
                      "src": "991:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "987:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "975:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10413,
                            "name": "c",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10407,
                            "src": "1004:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 10414,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10392,
                            "src": "1008:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1004:5:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10416,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "1013:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1004:10:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10412,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "996:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "996:19:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10419,
                  "nodeType": "ExpressionStatement",
                  "src": "996:19:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10420,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10407,
                    "src": "1026:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10398,
                  "id": 10421,
                  "nodeType": "Return",
                  "src": "1019:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10390,
              "nodeType": "StructuredDocumentation",
              "src": "597:70:61",
              "text": "@dev Multiplies two unsigned integers, reverts on overflow."
            },
            "id": 10423,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10392,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "682:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "682:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10394,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "693:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "681:22:61"
            },
            "returnParameters": {
              "id": 10398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10397,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "727:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "727:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "726:9:61"
            },
            "scope": 10554,
            "src": "669:362:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10447,
              "nodeType": "Block",
              "src": "1215:200:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10434,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10428,
                          "src": "1289:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1293:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1289:5:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10433,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1281:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1281:14:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10438,
                  "nodeType": "ExpressionStatement",
                  "src": "1281:14:61"
                },
                {
                  "assignments": [
                    10440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10440,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10447,
                      "src": "1300:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10439,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1300:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10444,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10441,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10426,
                      "src": "1312:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10442,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10428,
                      "src": "1316:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1312:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1300:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10445,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10440,
                    "src": "1410:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10432,
                  "id": 10446,
                  "nodeType": "Return",
                  "src": "1403:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10424,
              "nodeType": "StructuredDocumentation",
              "src": "1034:111:61",
              "text": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero."
            },
            "id": 10448,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "div",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10426,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1160:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10425,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1160:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10428,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1171:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10427,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1171:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1159:22:61"
            },
            "returnParameters": {
              "id": 10432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1205:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1205:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1204:9:61"
            },
            "scope": 10554,
            "src": "1147:268:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10468,
              "nodeType": "Block",
              "src": "1620:39:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10459,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10453,
                          "src": "1632:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1637:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1632:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1624:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1624:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10463,
                  "nodeType": "ExpressionStatement",
                  "src": "1624:15:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10464,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10451,
                      "src": "1650:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10465,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10453,
                      "src": "1654:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1650:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10457,
                  "id": 10467,
                  "nodeType": "Return",
                  "src": "1643:12:61"
                }
              ]
            },
            "documentation": {
              "id": 10449,
              "nodeType": "StructuredDocumentation",
              "src": "1418:132:61",
              "text": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero."
            },
            "id": 10469,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10451,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1565:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1565:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10453,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1576:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1576:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1564:22:61"
            },
            "returnParameters": {
              "id": 10457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10456,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1610:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1610:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1609:9:61"
            },
            "scope": 10554,
            "src": "1552:107:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10486,
              "nodeType": "Block",
              "src": "1783:29:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 10481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10479,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10472,
                        "src": "1794:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10480,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10474,
                        "src": "1799:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1794:6:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 10483,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10474,
                      "src": "1807:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 10484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1794:14:61",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 10482,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10472,
                      "src": "1803:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10478,
                  "id": 10485,
                  "nodeType": "Return",
                  "src": "1787:21:61"
                }
              ]
            },
            "documentation": {
              "id": 10470,
              "nodeType": "StructuredDocumentation",
              "src": "1662:51:61",
              "text": "@dev Returns the largest of two numbers."
            },
            "id": 10487,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10472,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1728:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1728:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10474,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1739:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1739:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1727:22:61"
            },
            "returnParameters": {
              "id": 10478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10477,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1773:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1773:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1772:9:61"
            },
            "scope": 10554,
            "src": "1715:97:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10504,
              "nodeType": "Block",
              "src": "1937:28:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 10499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10497,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10490,
                        "src": "1948:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10498,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10492,
                        "src": "1952:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1948:5:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 10501,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10492,
                      "src": "1960:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 10502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1948:13:61",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 10500,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10490,
                      "src": "1956:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10496,
                  "id": 10503,
                  "nodeType": "Return",
                  "src": "1941:20:61"
                }
              ]
            },
            "documentation": {
              "id": 10488,
              "nodeType": "StructuredDocumentation",
              "src": "1815:52:61",
              "text": "@dev Returns the smallest of two numbers."
            },
            "id": 10505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10493,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10490,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1882:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1882:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10492,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1893:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10491,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1893:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1881:22:61"
            },
            "returnParameters": {
              "id": 10496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10495,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1927:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10494,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1927:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1926:9:61"
            },
            "scope": 10554,
            "src": "1869:96:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10525,
              "nodeType": "Block",
              "src": "2111:32:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 10519,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10508,
                            "src": "2130:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 10520,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10510,
                            "src": "2133:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 10518,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10423,
                          "src": "2126:3:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 10521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2126:9:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10522,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10512,
                        "src": "2137:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 10517,
                      "name": "div",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10448,
                      "src": "2122:3:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2122:17:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10516,
                  "id": 10524,
                  "nodeType": "Return",
                  "src": "2115:24:61"
                }
              ]
            },
            "documentation": {
              "id": 10506,
              "nodeType": "StructuredDocumentation",
              "src": "1968:52:61",
              "text": "@dev Multiplies the a by the fraction b/c"
            },
            "id": 10526,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulByFraction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10508,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2045:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10507,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2045:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10510,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2056:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10509,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2056:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10512,
                  "mutability": "mutable",
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2067:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10511,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2067:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2044:33:61"
            },
            "returnParameters": {
              "id": 10516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2101:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2101:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2100:9:61"
            },
            "scope": 10554,
            "src": "2022:121:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10542,
              "nodeType": "Block",
              "src": "2293:39:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10537,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10529,
                        "src": "2318:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10538,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10531,
                        "src": "2321:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "313030",
                        "id": 10539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2324:3:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        },
                        "value": "100"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        }
                      ],
                      "id": 10536,
                      "name": "mulByFraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10526,
                      "src": "2304:13:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2304:24:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10535,
                  "id": 10541,
                  "nodeType": "Return",
                  "src": "2297:31:61"
                }
              ]
            },
            "documentation": {
              "id": 10527,
              "nodeType": "StructuredDocumentation",
              "src": "2146:70:61",
              "text": "@dev Return b percents of a (equivalent to a percents of b)"
            },
            "id": 10543,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "percentage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10529,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2238:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2238:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10531,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2249:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10530,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2249:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2237:22:61"
            },
            "returnParameters": {
              "id": 10535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2283:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2283:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2282:9:61"
            },
            "scope": 10554,
            "src": "2218:114:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10552,
              "nodeType": "Block",
              "src": "2540:1486:61",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2555:1468:61",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2560:12:61",
                        "value": {
                          "name": "x",
                          "nodeType": "YulIdentifier",
                          "src": "2571:1:61"
                        },
                        "variables": [
                          {
                            "name": "arg",
                            "nodeType": "YulTypedName",
                            "src": "2564:3:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2576:13:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2585:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2587:1:61",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "sub",
                            "nodeType": "YulIdentifier",
                            "src": "2581:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2581:8:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2576:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2593:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2601:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2608:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2611:4:61",
                                  "type": "",
                                  "value": "0x02"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2604:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2604:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2598:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2598:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2593:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2621:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2629:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2636:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2639:4:61",
                                  "type": "",
                                  "value": "0x04"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2632:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2632:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2626:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2626:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2621:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2649:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2657:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2664:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2667:4:61",
                                  "type": "",
                                  "value": "0x10"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2660:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2660:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2654:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2654:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2649:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2677:25:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2685:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2692:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2695:5:61",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2688:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2688:13:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2682:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2682:20:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2677:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2706:27:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2714:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2721:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2724:7:61",
                                  "type": "",
                                  "value": "0x10000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2717:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2717:15:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2711:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2711:22:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2706:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2737:31:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2745:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2752:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2755:11:61",
                                  "type": "",
                                  "value": "0x100000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2748:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2748:19:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2742:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2742:26:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2737:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2772:39:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2780:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2787:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2790:19:61",
                                  "type": "",
                                  "value": "0x10000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2783:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2783:27:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2777:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2777:34:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2772:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2815:55:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2823:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2830:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2833:35:61",
                                  "type": "",
                                  "value": "0x100000000000000000000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2826:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2826:43:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2820:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2820:50:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2815:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2874:14:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2883:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2886:1:61",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2879:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2879:9:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2874:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2892:20:61",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2907:4:61",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "2901:5:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2901:11:61"
                        },
                        "variables": [
                          {
                            "name": "m",
                            "nodeType": "YulTypedName",
                            "src": "2896:1:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "m",
                              "nodeType": "YulIdentifier",
                              "src": "2923:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2936:66:61",
                              "type": "",
                              "value": "0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2916:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2916:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2916:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3018:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3020:4:61",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3014:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3014:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3027:66:61",
                              "type": "",
                              "value": "0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3007:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3007:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3007:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3109:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3111:4:61",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3105:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3105:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3118:66:61",
                              "type": "",
                              "value": "0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3098:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3098:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3098:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3200:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3202:4:61",
                                  "type": "",
                                  "value": "0x60"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3196:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3196:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3209:66:61",
                              "type": "",
                              "value": "0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3189:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3189:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3189:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3291:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3293:4:61",
                                  "type": "",
                                  "value": "0x80"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3287:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3287:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3300:66:61",
                              "type": "",
                              "value": "0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3280:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3280:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3280:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3382:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3384:4:61",
                                  "type": "",
                                  "value": "0xa0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3378:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3378:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3391:66:61",
                              "type": "",
                              "value": "0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3371:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3371:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3371:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3473:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3475:4:61",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3469:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3469:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3482:66:61",
                              "type": "",
                              "value": "0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3462:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3462:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3462:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3564:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3566:4:61",
                                  "type": "",
                                  "value": "0xe0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3560:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3560:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3573:66:61",
                              "type": "",
                              "value": "0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3553:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3553:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3553:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3651:4:61",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3661:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3664:5:61",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3657:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3657:13:61"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3644:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3644:27:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3644:27:61"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3675:77:61",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "3688:64:61",
                          "type": "",
                          "value": "0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff"
                        },
                        "variables": [
                          {
                            "name": "magic",
                            "nodeType": "YulTypedName",
                            "src": "3679:5:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3756:78:61",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "3769:65:61",
                          "type": "",
                          "value": "0x100000000000000000000000000000000000000000000000000000000000000"
                        },
                        "variables": [
                          {
                            "name": "shift",
                            "nodeType": "YulTypedName",
                            "src": "3760:5:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3838:34:61",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3855:1:61"
                                },
                                {
                                  "name": "magic",
                                  "nodeType": "YulIdentifier",
                                  "src": "3858:5:61"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "3851:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3851:13:61"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "3866:5:61"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "3847:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3847:25:61"
                        },
                        "variables": [
                          {
                            "name": "a",
                            "nodeType": "YulTypedName",
                            "src": "3842:1:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3876:41:61",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "m",
                                      "nodeType": "YulIdentifier",
                                      "src": "3895:1:61"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3901:3:61",
                                          "type": "",
                                          "value": "255"
                                        },
                                        {
                                          "name": "a",
                                          "nodeType": "YulIdentifier",
                                          "src": "3905:1:61"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "3897:3:61"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3897:10:61"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3891:3:61"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3891:17:61"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3885:5:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3885:24:61"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "3911:5:61"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "3881:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3881:36:61"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3876:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3921:98:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "y",
                              "nodeType": "YulIdentifier",
                              "src": "3930:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3937:3:61",
                                  "type": "",
                                  "value": "256"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "arg",
                                      "nodeType": "YulIdentifier",
                                      "src": "3945:3:61"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "3950:66:61",
                                      "type": "",
                                      "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "gt",
                                    "nodeType": "YulIdentifier",
                                    "src": "3942:2:61"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3942:75:61"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "3933:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3933:85:61"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3926:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3926:93:61"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3921:1:61"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2571:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2576:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2585:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2593:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2601:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2608:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2621:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2629:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2636:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2649:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2657:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2664:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2677:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2685:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2692:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2706:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2714:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2721:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2737:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2745:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2752:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2772:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2780:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2787:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2815:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2823:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2830:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2874:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2883:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3855:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3876:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3921:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3930:1:61",
                      "valueSize": 1
                    }
                  ],
                  "id": 10551,
                  "nodeType": "InlineAssembly",
                  "src": "2544:1479:61"
                }
              ]
            },
            "documentation": {
              "id": 10544,
              "nodeType": "StructuredDocumentation",
              "src": "2335:150:61",
              "text": "@dev Returns the base 2 log of x\n@notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity"
            },
            "id": 10553,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "log",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10546,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10553,
                  "src": "2500:6:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10545,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2500:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2499:8:61"
            },
            "returnParameters": {
              "id": 10550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10549,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10553,
                  "src": "2531:6:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10548,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2530:8:61"
            },
            "scope": 10554,
            "src": "2487:1539:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 10555,
        "src": "133:3895:61"
      }
    ],
    "src": "0:4029:61"
  },
  "legacyAST": {
    "absolutePath": "@iexec/solidity/contracts/Libs/SafeMathExtended.sol",
    "exportedSymbols": {
      "SafeMathExtended": [
        10554
      ]
    },
    "id": 10555,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 10338,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:61"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 10339,
          "nodeType": "StructuredDocumentation",
          "src": "25:107:61",
          "text": "@title SafeMathExtended\n@dev Unsigned math operations with safety checks that revert on error"
        },
        "fullyImplemented": true,
        "id": 10554,
        "linearizedBaseContracts": [
          10554
        ],
        "name": "SafeMathExtended",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 10363,
              "nodeType": "Block",
              "src": "295:56:61",
              "statements": [
                {
                  "assignments": [
                    10350
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10350,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10363,
                      "src": "299:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10349,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "299:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10354,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10351,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10342,
                      "src": "311:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10352,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10344,
                      "src": "315:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "311:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "299:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10358,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10356,
                          "name": "c",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10350,
                          "src": "328:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10357,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10342,
                          "src": "333:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "328:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10355,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "320:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10359,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "320:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10360,
                  "nodeType": "ExpressionStatement",
                  "src": "320:15:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10361,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10350,
                    "src": "346:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10348,
                  "id": 10362,
                  "nodeType": "Return",
                  "src": "339:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10340,
              "nodeType": "StructuredDocumentation",
              "src": "161:64:61",
              "text": "@dev Adds two unsigned integers, reverts on overflow."
            },
            "id": 10364,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "add",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10345,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10342,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "240:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "240:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10344,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "251:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "251:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "239:22:61"
            },
            "returnParameters": {
              "id": 10348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10347,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10364,
                  "src": "285:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10346,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "285:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "284:9:61"
            },
            "scope": 10554,
            "src": "227:124:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10388,
              "nodeType": "Block",
              "src": "538:56:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10375,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10369,
                          "src": "550:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10376,
                          "name": "a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10367,
                          "src": "555:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "550:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10374,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "542:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "542:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10379,
                  "nodeType": "ExpressionStatement",
                  "src": "542:15:61"
                },
                {
                  "assignments": [
                    10381
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10381,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10388,
                      "src": "561:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10380,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "561:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10385,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10382,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10367,
                      "src": "573:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10383,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10369,
                      "src": "577:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "573:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "561:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10386,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10381,
                    "src": "589:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10373,
                  "id": 10387,
                  "nodeType": "Return",
                  "src": "582:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10365,
              "nodeType": "StructuredDocumentation",
              "src": "354:114:61",
              "text": "@dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend)."
            },
            "id": 10389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sub",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10370,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10367,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "483:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10366,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "483:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10369,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "494:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "494:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "482:22:61"
            },
            "returnParameters": {
              "id": 10373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10372,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10389,
                  "src": "528:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10371,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "528:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "527:9:61"
            },
            "scope": 10554,
            "src": "470:124:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10422,
              "nodeType": "Block",
              "src": "737:294:61",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10399,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10392,
                      "src": "944:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 10400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "949:1:61",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "944:6:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 10405,
                  "nodeType": "IfStatement",
                  "src": "940:32:61",
                  "trueBody": {
                    "id": 10404,
                    "nodeType": "Block",
                    "src": "954:18:61",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "966:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 10398,
                        "id": 10403,
                        "nodeType": "Return",
                        "src": "959:8:61"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    10407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10407,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10422,
                      "src": "975:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10406,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "975:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10411,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10408,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10392,
                      "src": "987:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10409,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10394,
                      "src": "991:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "987:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "975:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10417,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 10415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 10413,
                            "name": "c",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10407,
                            "src": "1004:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 10414,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10392,
                            "src": "1008:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "1004:5:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 10416,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10394,
                          "src": "1013:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1004:10:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10412,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "996:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10418,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "996:19:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10419,
                  "nodeType": "ExpressionStatement",
                  "src": "996:19:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10420,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10407,
                    "src": "1026:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10398,
                  "id": 10421,
                  "nodeType": "Return",
                  "src": "1019:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10390,
              "nodeType": "StructuredDocumentation",
              "src": "597:70:61",
              "text": "@dev Multiplies two unsigned integers, reverts on overflow."
            },
            "id": 10423,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mul",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10392,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "682:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "682:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10394,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "693:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10393,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "693:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "681:22:61"
            },
            "returnParameters": {
              "id": 10398,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10397,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10423,
                  "src": "727:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10396,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "727:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "726:9:61"
            },
            "scope": 10554,
            "src": "669:362:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10447,
              "nodeType": "Block",
              "src": "1215:200:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10436,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10434,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10428,
                          "src": "1289:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10435,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1293:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1289:5:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10433,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1281:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1281:14:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10438,
                  "nodeType": "ExpressionStatement",
                  "src": "1281:14:61"
                },
                {
                  "assignments": [
                    10440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 10440,
                      "mutability": "mutable",
                      "name": "c",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 10447,
                      "src": "1300:9:61",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 10439,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1300:7:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 10444,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10441,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10426,
                      "src": "1312:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10442,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10428,
                      "src": "1316:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1312:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1300:17:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 10445,
                    "name": "c",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10440,
                    "src": "1410:1:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10432,
                  "id": 10446,
                  "nodeType": "Return",
                  "src": "1403:8:61"
                }
              ]
            },
            "documentation": {
              "id": 10424,
              "nodeType": "StructuredDocumentation",
              "src": "1034:111:61",
              "text": "@dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero."
            },
            "id": 10448,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "div",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10426,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1160:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10425,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1160:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10428,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1171:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10427,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1171:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1159:22:61"
            },
            "returnParameters": {
              "id": 10432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10448,
                  "src": "1205:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10430,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1205:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1204:9:61"
            },
            "scope": 10554,
            "src": "1147:268:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10468,
              "nodeType": "Block",
              "src": "1620:39:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 10461,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 10459,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10453,
                          "src": "1632:1:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 10460,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1637:1:61",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1632:6:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 10458,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1624:7:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 10462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1624:15:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 10463,
                  "nodeType": "ExpressionStatement",
                  "src": "1624:15:61"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 10466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 10464,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10451,
                      "src": "1650:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "%",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 10465,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10453,
                      "src": "1654:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1650:5:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10457,
                  "id": 10467,
                  "nodeType": "Return",
                  "src": "1643:12:61"
                }
              ]
            },
            "documentation": {
              "id": 10449,
              "nodeType": "StructuredDocumentation",
              "src": "1418:132:61",
              "text": "@dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),\nreverts when dividing by zero."
            },
            "id": 10469,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mod",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10454,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10451,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1565:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10450,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1565:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10453,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1576:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10452,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1576:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1564:22:61"
            },
            "returnParameters": {
              "id": 10457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10456,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10469,
                  "src": "1610:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1610:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1609:9:61"
            },
            "scope": 10554,
            "src": "1552:107:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10486,
              "nodeType": "Block",
              "src": "1783:29:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 10481,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10479,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10472,
                        "src": "1794:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10480,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10474,
                        "src": "1799:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1794:6:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 10483,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10474,
                      "src": "1807:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 10484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1794:14:61",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 10482,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10472,
                      "src": "1803:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10478,
                  "id": 10485,
                  "nodeType": "Return",
                  "src": "1787:21:61"
                }
              ]
            },
            "documentation": {
              "id": 10470,
              "nodeType": "StructuredDocumentation",
              "src": "1662:51:61",
              "text": "@dev Returns the largest of two numbers."
            },
            "id": 10487,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "max",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10472,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1728:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10471,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1728:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10474,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1739:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10473,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1739:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1727:22:61"
            },
            "returnParameters": {
              "id": 10478,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10477,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10487,
                  "src": "1773:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1773:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1772:9:61"
            },
            "scope": 10554,
            "src": "1715:97:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10504,
              "nodeType": "Block",
              "src": "1937:28:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 10499,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 10497,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10490,
                        "src": "1948:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 10498,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10492,
                        "src": "1952:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "1948:5:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "id": 10501,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10492,
                      "src": "1960:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 10502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "1948:13:61",
                    "trueExpression": {
                      "argumentTypes": null,
                      "id": 10500,
                      "name": "a",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10490,
                      "src": "1956:1:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10496,
                  "id": 10503,
                  "nodeType": "Return",
                  "src": "1941:20:61"
                }
              ]
            },
            "documentation": {
              "id": 10488,
              "nodeType": "StructuredDocumentation",
              "src": "1815:52:61",
              "text": "@dev Returns the smallest of two numbers."
            },
            "id": 10505,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "min",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10493,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10490,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1882:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10489,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1882:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10492,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1893:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10491,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1893:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1881:22:61"
            },
            "returnParameters": {
              "id": 10496,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10495,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10505,
                  "src": "1927:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10494,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1927:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1926:9:61"
            },
            "scope": 10554,
            "src": "1869:96:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10525,
              "nodeType": "Block",
              "src": "2111:32:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 10519,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10508,
                            "src": "2130:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 10520,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10510,
                            "src": "2133:1:61",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 10518,
                          "name": "mul",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10423,
                          "src": "2126:3:61",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 10521,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2126:9:61",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10522,
                        "name": "c",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10512,
                        "src": "2137:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 10517,
                      "name": "div",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10448,
                      "src": "2122:3:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2122:17:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10516,
                  "id": 10524,
                  "nodeType": "Return",
                  "src": "2115:24:61"
                }
              ]
            },
            "documentation": {
              "id": 10506,
              "nodeType": "StructuredDocumentation",
              "src": "1968:52:61",
              "text": "@dev Multiplies the a by the fraction b/c"
            },
            "id": 10526,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mulByFraction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10508,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2045:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10507,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2045:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10510,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2056:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10509,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2056:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10512,
                  "mutability": "mutable",
                  "name": "c",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2067:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10511,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2067:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2044:33:61"
            },
            "returnParameters": {
              "id": 10516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10526,
                  "src": "2101:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2101:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2100:9:61"
            },
            "scope": 10554,
            "src": "2022:121:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10542,
              "nodeType": "Block",
              "src": "2293:39:61",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 10537,
                        "name": "a",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10529,
                        "src": "2318:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 10538,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10531,
                        "src": "2321:1:61",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "313030",
                        "id": 10539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2324:3:61",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        },
                        "value": "100"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_rational_100_by_1",
                          "typeString": "int_const 100"
                        }
                      ],
                      "id": 10536,
                      "name": "mulByFraction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10526,
                      "src": "2304:13:61",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 10540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2304:24:61",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 10535,
                  "id": 10541,
                  "nodeType": "Return",
                  "src": "2297:31:61"
                }
              ]
            },
            "documentation": {
              "id": 10527,
              "nodeType": "StructuredDocumentation",
              "src": "2146:70:61",
              "text": "@dev Return b percents of a (equivalent to a percents of b)"
            },
            "id": 10543,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "percentage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10529,
                  "mutability": "mutable",
                  "name": "a",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2238:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10528,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2238:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10531,
                  "mutability": "mutable",
                  "name": "b",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2249:9:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10530,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2249:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2237:22:61"
            },
            "returnParameters": {
              "id": 10535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10543,
                  "src": "2283:7:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10533,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2283:7:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2282:9:61"
            },
            "scope": 10554,
            "src": "2218:114:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 10552,
              "nodeType": "Block",
              "src": "2540:1486:61",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2555:1468:61",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2560:12:61",
                        "value": {
                          "name": "x",
                          "nodeType": "YulIdentifier",
                          "src": "2571:1:61"
                        },
                        "variables": [
                          {
                            "name": "arg",
                            "nodeType": "YulTypedName",
                            "src": "2564:3:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2576:13:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2585:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2587:1:61",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "sub",
                            "nodeType": "YulIdentifier",
                            "src": "2581:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2581:8:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2576:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2593:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2601:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2608:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2611:4:61",
                                  "type": "",
                                  "value": "0x02"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2604:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2604:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2598:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2598:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2593:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2621:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2629:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2636:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2639:4:61",
                                  "type": "",
                                  "value": "0x04"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2632:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2632:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2626:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2626:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2621:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2649:24:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2657:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2664:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2667:4:61",
                                  "type": "",
                                  "value": "0x10"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2660:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2660:12:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2654:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2654:19:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2649:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2677:25:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2685:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2692:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2695:5:61",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2688:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2688:13:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2682:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2682:20:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2677:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2706:27:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2714:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2721:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2724:7:61",
                                  "type": "",
                                  "value": "0x10000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2717:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2717:15:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2711:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2711:22:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2706:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2737:31:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2745:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2752:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2755:11:61",
                                  "type": "",
                                  "value": "0x100000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2748:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2748:19:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2742:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2742:26:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2737:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2772:39:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2780:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2787:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2790:19:61",
                                  "type": "",
                                  "value": "0x10000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2783:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2783:27:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2777:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2777:34:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2772:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2815:55:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2823:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "2830:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "2833:35:61",
                                  "type": "",
                                  "value": "0x100000000000000000000000000000000"
                                }
                              ],
                              "functionName": {
                                "name": "div",
                                "nodeType": "YulIdentifier",
                                "src": "2826:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2826:43:61"
                            }
                          ],
                          "functionName": {
                            "name": "or",
                            "nodeType": "YulIdentifier",
                            "src": "2820:2:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2820:50:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2815:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "2874:14:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "x",
                              "nodeType": "YulIdentifier",
                              "src": "2883:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2886:1:61",
                              "type": "",
                              "value": "1"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "2879:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2879:9:61"
                        },
                        "variableNames": [
                          {
                            "name": "x",
                            "nodeType": "YulIdentifier",
                            "src": "2874:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2892:20:61",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2907:4:61",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "2901:5:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2901:11:61"
                        },
                        "variables": [
                          {
                            "name": "m",
                            "nodeType": "YulTypedName",
                            "src": "2896:1:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "m",
                              "nodeType": "YulIdentifier",
                              "src": "2923:1:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2936:66:61",
                              "type": "",
                              "value": "0xf8f9cbfae6cc78fbefe7cdc3a1793dfcf4f0e8bbd8cec470b6a28a7a5a3e1efd"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2916:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2916:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2916:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3018:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3020:4:61",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3014:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3014:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3027:66:61",
                              "type": "",
                              "value": "0xf5ecf1b3e9debc68e1d9cfabc5997135bfb7a7a3938b7b606b5b4b3f2f1f0ffe"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3007:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3007:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3007:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3109:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3111:4:61",
                                  "type": "",
                                  "value": "0x40"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3105:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3105:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3118:66:61",
                              "type": "",
                              "value": "0xf6e4ed9ff2d6b458eadcdf97bd91692de2d4da8fd2d0ac50c6ae9a8272523616"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3098:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3098:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3098:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3200:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3202:4:61",
                                  "type": "",
                                  "value": "0x60"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3196:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3196:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3209:66:61",
                              "type": "",
                              "value": "0xc8c0b887b0a8a4489c948c7f847c6125746c645c544c444038302820181008ff"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3189:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3189:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3189:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3291:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3293:4:61",
                                  "type": "",
                                  "value": "0x80"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3287:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3287:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3300:66:61",
                              "type": "",
                              "value": "0xf7cae577eec2a03cf3bad76fb589591debb2dd67e0aa9834bea6925f6a4a2e0e"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3280:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3280:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3280:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3382:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3384:4:61",
                                  "type": "",
                                  "value": "0xa0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3378:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3378:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3391:66:61",
                              "type": "",
                              "value": "0xe39ed557db96902cd38ed14fad815115c786af479b7e83247363534337271707"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3371:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3371:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3371:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3473:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3475:4:61",
                                  "type": "",
                                  "value": "0xc0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3469:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3469:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3482:66:61",
                              "type": "",
                              "value": "0xc976c13bb96e881cb166a933a55e490d9d56952b8d4e801485467d2362422606"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3462:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3462:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3462:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3564:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3566:4:61",
                                  "type": "",
                                  "value": "0xe0"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3560:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3560:11:61"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3573:66:61",
                              "type": "",
                              "value": "0x753a6d1b65325d0c552a4d1345224105391a310b29122104190a110309020100"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3553:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3553:87:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3553:87:61"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3651:4:61",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "m",
                                  "nodeType": "YulIdentifier",
                                  "src": "3661:1:61"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3664:5:61",
                                  "type": "",
                                  "value": "0x100"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3657:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3657:13:61"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3644:6:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3644:27:61"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3644:27:61"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3675:77:61",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "3688:64:61",
                          "type": "",
                          "value": "0x818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff"
                        },
                        "variables": [
                          {
                            "name": "magic",
                            "nodeType": "YulTypedName",
                            "src": "3679:5:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3756:78:61",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "3769:65:61",
                          "type": "",
                          "value": "0x100000000000000000000000000000000000000000000000000000000000000"
                        },
                        "variables": [
                          {
                            "name": "shift",
                            "nodeType": "YulTypedName",
                            "src": "3760:5:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "3838:34:61",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nodeType": "YulIdentifier",
                                  "src": "3855:1:61"
                                },
                                {
                                  "name": "magic",
                                  "nodeType": "YulIdentifier",
                                  "src": "3858:5:61"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "3851:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3851:13:61"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "3866:5:61"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "3847:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3847:25:61"
                        },
                        "variables": [
                          {
                            "name": "a",
                            "nodeType": "YulTypedName",
                            "src": "3842:1:61",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3876:41:61",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "m",
                                      "nodeType": "YulIdentifier",
                                      "src": "3895:1:61"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "3901:3:61",
                                          "type": "",
                                          "value": "255"
                                        },
                                        {
                                          "name": "a",
                                          "nodeType": "YulIdentifier",
                                          "src": "3905:1:61"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "sub",
                                        "nodeType": "YulIdentifier",
                                        "src": "3897:3:61"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "3897:10:61"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3891:3:61"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3891:17:61"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3885:5:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3885:24:61"
                            },
                            {
                              "name": "shift",
                              "nodeType": "YulIdentifier",
                              "src": "3911:5:61"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nodeType": "YulIdentifier",
                            "src": "3881:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3881:36:61"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3876:1:61"
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "3921:98:61",
                        "value": {
                          "arguments": [
                            {
                              "name": "y",
                              "nodeType": "YulIdentifier",
                              "src": "3930:1:61"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "3937:3:61",
                                  "type": "",
                                  "value": "256"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "arg",
                                      "nodeType": "YulIdentifier",
                                      "src": "3945:3:61"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "3950:66:61",
                                      "type": "",
                                      "value": "0x8000000000000000000000000000000000000000000000000000000000000000"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "gt",
                                    "nodeType": "YulIdentifier",
                                    "src": "3942:2:61"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3942:75:61"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nodeType": "YulIdentifier",
                                "src": "3933:3:61"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3933:85:61"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3926:3:61"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3926:93:61"
                        },
                        "variableNames": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "3921:1:61"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2571:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2576:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2585:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2593:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2601:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2608:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2621:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2629:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2636:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2649:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2657:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2664:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2677:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2685:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2692:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2706:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2714:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2721:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2737:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2745:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2752:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2772:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2780:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2787:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2815:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2823:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2830:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2874:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2883:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10546,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3855:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3876:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3921:1:61",
                      "valueSize": 1
                    },
                    {
                      "declaration": 10549,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3930:1:61",
                      "valueSize": 1
                    }
                  ],
                  "id": 10551,
                  "nodeType": "InlineAssembly",
                  "src": "2544:1479:61"
                }
              ]
            },
            "documentation": {
              "id": 10544,
              "nodeType": "StructuredDocumentation",
              "src": "2335:150:61",
              "text": "@dev Returns the base 2 log of x\n@notice Source : https://ethereum.stackexchange.com/questions/8086/logarithm-math-operation-in-solidity"
            },
            "id": 10553,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "log",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 10547,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10546,
                  "mutability": "mutable",
                  "name": "x",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10553,
                  "src": "2500:6:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10545,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2500:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2499:8:61"
            },
            "returnParameters": {
              "id": 10550,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10549,
                  "mutability": "mutable",
                  "name": "y",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 10553,
                  "src": "2531:6:61",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 10548,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2531:4:61",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2530:8:61"
            },
            "scope": 10554,
            "src": "2487:1539:61",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 10555,
        "src": "133:3895:61"
      }
    ],
    "src": "0:4029:61"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.6+commit.6c089d02.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.1.0",
  "updatedAt": "2020-04-21T18:10:34.960Z",
  "devdoc": {
    "details": "Unsigned math operations with safety checks that revert on error",
    "methods": {},
    "title": "SafeMathExtended"
  },
  "userdoc": {
    "methods": {}
  }
}