{
  "fileName": "ReentrancyGuard.sol",
  "contractName": "ReentrancyGuardUpgradeSafe",
  "source": "pragma solidity ^0.6.0;\nimport \"../Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\ncontract ReentrancyGuardUpgradeSafe is Initializable {\n    bool private _notEntered;\n\n\n    function __ReentrancyGuard_init() internal initializer {\n        __ReentrancyGuard_init_unchained();\n    }\n\n    function __ReentrancyGuard_init_unchained() internal initializer {\n\n\n        // Storing an initial non-zero value makes deployment a bit more\n        // expensive, but in exchange the refund on every call to nonReentrant\n        // will be lower in amount. Since refunds are capped to a percetange of\n        // the total transaction's gas, it is best to keep them low in cases\n        // like this one, to increase the likelihood of the full refund coming\n        // into effect.\n        _notEntered = true;\n\n    }\n\n\n    /**\n     * @dev Prevents a contract from calling itself, directly or indirectly.\n     * Calling a `nonReentrant` function from another `nonReentrant`\n     * function is not supported. It is possible to prevent this from happening\n     * by making the `nonReentrant` function external, and make it call a\n     * `private` function that does the actual work.\n     */\n    modifier nonReentrant() {\n        // On the first call to nonReentrant, _notEntered will be true\n        require(_notEntered, \"ReentrancyGuard: reentrant call\");\n\n        // Any calls to nonReentrant after this point will fail\n        _notEntered = false;\n\n        _;\n\n        // By storing the original value once again, a refund is triggered (see\n        // https://eips.ethereum.org/EIPS/eip-2200)\n        _notEntered = true;\n    }\n\n    uint256[49] private __gap;\n}\n",
  "sourcePath": "contracts/utils/ReentrancyGuard.sol",
  "sourceMap": "807:1562:105:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;807:1562:105;;;;;;;",
  "deployedSourceMap": "807:1562:105:-:0;;;12:1:-1;9;2:12",
  "abi": [],
  "ast": {
    "absolutePath": "contracts/utils/ReentrancyGuard.sol",
    "exportedSymbols": {
      "ReentrancyGuardUpgradeSafe": [
        15193
      ]
    },
    "id": 15194,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 15145,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:105"
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../Initializable.sol",
        "id": 15146,
        "nodeType": "ImportDirective",
        "scope": 15194,
        "sourceUnit": 1408,
        "src": "24:30:105",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 15148,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1407,
              "src": "846:13:105",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1407",
                "typeString": "contract Initializable"
              }
            },
            "id": 15149,
            "nodeType": "InheritanceSpecifier",
            "src": "846:13:105"
          }
        ],
        "contractDependencies": [
          1407
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 15147,
          "nodeType": "StructuredDocumentation",
          "src": "56:750:105",
          "text": "@dev Contract module that helps prevent reentrant calls to a function.\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\navailable, which can be applied to functions to make sure there are no nested\n(reentrant) calls to them.\n * Note that because there is a single `nonReentrant` guard, functions marked as\n`nonReentrant` may not call one another. This can be worked around by making\nthose functions `private`, and then adding `external` `nonReentrant` entry\npoints to them.\n * TIP: If you would like to learn more about reentrancy and alternative ways\nto protect against it, check out our blog post\nhttps://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]."
        },
        "fullyImplemented": true,
        "id": 15193,
        "linearizedBaseContracts": [
          15193,
          1407
        ],
        "name": "ReentrancyGuardUpgradeSafe",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 15151,
            "mutability": "mutable",
            "name": "_notEntered",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 15193,
            "src": "866:24:105",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 15150,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "866:4:105",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 15159,
              "nodeType": "Block",
              "src": "953:51:105",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 15156,
                      "name": "__ReentrancyGuard_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15170,
                      "src": "963:32:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 15157,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "963:34:105",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15158,
                  "nodeType": "ExpressionStatement",
                  "src": "963:34:105"
                }
              ]
            },
            "documentation": null,
            "id": 15160,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 15154,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15153,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "941:11:105",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "941:11:105"
              }
            ],
            "name": "__ReentrancyGuard_init",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 15152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "929:2:105"
            },
            "returnParameters": {
              "id": 15155,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "953:0:105"
            },
            "scope": 15193,
            "src": "898:106:105",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15169,
              "nodeType": "Block",
              "src": "1075:450:105",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15167,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 15165,
                      "name": "_notEntered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15151,
                      "src": "1499:11:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 15166,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1513:4:105",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1499:18:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15168,
                  "nodeType": "ExpressionStatement",
                  "src": "1499:18:105"
                }
              ]
            },
            "documentation": null,
            "id": 15170,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 15163,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 15162,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "1063:11:105",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1063:11:105"
              }
            ],
            "name": "__ReentrancyGuard_init_unchained",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 15161,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1051:2:105"
            },
            "returnParameters": {
              "id": 15164,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1075:0:105"
            },
            "scope": 15193,
            "src": "1010:515:105",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 15187,
              "nodeType": "Block",
              "src": "1925:410:105",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 15174,
                        "name": "_notEntered",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 15151,
                        "src": "2014:11:105",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5265656e7472616e637947756172643a207265656e7472616e742063616c6c",
                        "id": 15175,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2027:33:105",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619",
                          "typeString": "literal_string \"ReentrancyGuard: reentrant call\""
                        },
                        "value": "ReentrancyGuard: reentrant call"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ebf73bba305590e4764d5cb53b69bffd6d4d092d1a67551cb346f8cfcdab8619",
                          "typeString": "literal_string \"ReentrancyGuard: reentrant call\""
                        }
                      ],
                      "id": 15173,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2006:7:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 15176,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2006:55:105",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 15177,
                  "nodeType": "ExpressionStatement",
                  "src": "2006:55:105"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15180,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 15178,
                      "name": "_notEntered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15151,
                      "src": "2136:11:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 15179,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2150:5:105",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "2136:19:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15181,
                  "nodeType": "ExpressionStatement",
                  "src": "2136:19:105"
                },
                {
                  "id": 15182,
                  "nodeType": "PlaceholderStatement",
                  "src": "2166:1:105"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 15185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 15183,
                      "name": "_notEntered",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15151,
                      "src": "2310:11:105",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 15184,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2324:4:105",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "2310:18:105",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 15186,
                  "nodeType": "ExpressionStatement",
                  "src": "2310:18:105"
                }
              ]
            },
            "documentation": {
              "id": 15171,
              "nodeType": "StructuredDocumentation",
              "src": "1532:364:105",
              "text": "@dev Prevents a contract from calling itself, directly or indirectly.\nCalling a `nonReentrant` function from another `nonReentrant`\nfunction is not supported. It is possible to prevent this from happening\nby making the `nonReentrant` function external, and make it call a\n`private` function that does the actual work."
            },
            "id": 15188,
            "name": "nonReentrant",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 15172,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1922:2:105"
            },
            "src": "1901:434:105",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 15192,
            "mutability": "mutable",
            "name": "__gap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 15193,
            "src": "2341:25:105",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 15189,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2341:7:105",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 15191,
              "length": {
                "argumentTypes": null,
                "hexValue": "3439",
                "id": 15190,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "2349:2:105",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "2341:11:105",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 15194,
        "src": "807:1562:105"
      }
    ],
    "src": "0:2370:105"
  },
  "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212207556fbd5e72a6d119bb852841ab3713b2731157f200eb95fc6cb70c71c239d9264736f6c63430006070033",
  "deployedBytecode": "0x6080604052600080fdfea26469706673582212207556fbd5e72a6d119bb852841ab3713b2731157f200eb95fc6cb70c71c239d9264736f6c63430006070033",
  "compiler": {
    "name": "solc",
    "version": "0.6.7+commit.b8d736ae.Emscripten.clang",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
