{
  "fileName": "TokenTimelock.sol",
  "contractName": "TokenTimelockUpgradeSafe",
  "source": "pragma solidity ^0.6.0;\n\nimport \"./SafeERC20.sol\";\nimport \"../../Initializable.sol\";\n\n/**\n * @dev A token holder contract that will allow a beneficiary to extract the\n * tokens after a given release time.\n *\n * Useful for simple vesting schedules like \"advisors get all of their tokens\n * after 1 year\".\n *\n * For a more complete vesting schedule, see {TokenVesting}.\n */\ncontract TokenTimelockUpgradeSafe is Initializable {\n    using SafeERC20 for IERC20;\n\n    // ERC20 basic token contract being held\n    IERC20 private _token;\n\n    // beneficiary of tokens after they are released\n    address private _beneficiary;\n\n    // timestamp when token release is enabled\n    uint256 private _releaseTime;\n\n\n    function __TokenTimelock_init(IERC20 token, address beneficiary, uint256 releaseTime) internal initializer {\n        __TokenTimelock_init_unchained(token, beneficiary, releaseTime);\n    }\n\n    function __TokenTimelock_init_unchained(IERC20 token, address beneficiary, uint256 releaseTime) internal initializer {\n\n\n        // solhint-disable-next-line not-rely-on-time\n        require(releaseTime > block.timestamp, \"TokenTimelock: release time is before current time\");\n        _token = token;\n        _beneficiary = beneficiary;\n        _releaseTime = releaseTime;\n\n    }\n\n\n    /**\n     * @return the token being held.\n     */\n    function token() public view returns (IERC20) {\n        return _token;\n    }\n\n    /**\n     * @return the beneficiary of the tokens.\n     */\n    function beneficiary() public view returns (address) {\n        return _beneficiary;\n    }\n\n    /**\n     * @return the time when the tokens are released.\n     */\n    function releaseTime() public view returns (uint256) {\n        return _releaseTime;\n    }\n\n    /**\n     * @notice Transfers tokens held by timelock to beneficiary.\n     */\n    function release() public virtual {\n        // solhint-disable-next-line not-rely-on-time\n        require(block.timestamp >= _releaseTime, \"TokenTimelock: current time is before release time\");\n\n        uint256 amount = _token.balanceOf(address(this));\n        require(amount > 0, \"TokenTimelock: no tokens to release\");\n\n        _token.safeTransfer(_beneficiary, amount);\n    }\n\n    uint256[47] private __gap;\n}\n",
  "sourcePath": "contracts/token/ERC20/TokenTimelock.sol",
  "sourceMap": "372:1863:85:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;372:1863:85;;;;;;;",
  "deployedSourceMap": "372:1863:85:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;372:1863:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1482:89:85;;;:::i;:::-;;;;-1:-1:-1;;;;;1482:89:85;;;;;;;;;;;;;;1823:378;;;:::i;:::-;;1647:89;;;:::i;:::-;;;;;;;;;;;;;;;;1338:76;;;:::i;1482:89::-;1552:12;;-1:-1:-1;;;;;1552:12:85;1482:89;:::o;1823:378::-;1948:12;;1929:15;:31;;1921:94;;;;-1:-1:-1;;;1921:94:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2043:6;;:31;;;-1:-1:-1;;;2043:31:85;;2068:4;2043:31;;;;;;2026:14;;-1:-1:-1;;;;;2043:6:85;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;2:2:-1;;;;27:1;24;17:12;2:2;2043:31:85;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2043:31:85;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2043:31:85;;-1:-1:-1;2092:10:85;2084:58;;;;-1:-1:-1;;;2084:58:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2173:12;;2153:6;;:41;;-1:-1:-1;;;;;2153:6:85;;;;2173:12;2187:6;2153:41;:19;:41;:::i;:::-;1823:378;:::o;1647:89::-;1717:12;;1647:89;:::o;1338:76::-;1401:6;;-1:-1:-1;;;;;1401:6:85;1338:76;:::o;662:175:84:-;771:58;;;-1:-1:-1;;;;;771:58:84;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;771:58:84;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;744:86:84;;764:5;;744:19;:86::i;:::-;662:175;;;:::o;2671:1096::-;3267:27;3275:5;-1:-1:-1;;;;;3267:25:84;;:27::i;:::-;3259:71;;;;;-1:-1:-1;;;3259:71:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;3401:12;3415:23;3450:5;-1:-1:-1;;;;;3442:19:84;3462:4;3442:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3442:25:84;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;3400:67:84;;;;3485:7;3477:52;;;;;-1:-1:-1;;;3477:52:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3544:17;;:21;3540:221;;3684:10;3673:30;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3673:30:84;3665:85;;;;-1:-1:-1;;;3665:85:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2671:1096;;;;:::o;685:610:98:-;745:4;1206:20;;1051:66;1245:23;;;;;;:42;;-1:-1:-1;1272:15:98;;;1245:42;1237:51;685:610;-1:-1:-1;;;;685:610:98:o",
  "abi": [
    {
      "inputs": [],
      "name": "beneficiary",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "release",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "releaseTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/token/ERC20/TokenTimelock.sol",
    "exportedSymbols": {
      "TokenTimelockUpgradeSafe": [
        11225
      ]
    },
    "id": 11226,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11092,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:85"
      },
      {
        "absolutePath": "contracts/token/ERC20/SafeERC20.sol",
        "file": "./SafeERC20.sol",
        "id": 11093,
        "nodeType": "ImportDirective",
        "scope": 11226,
        "sourceUnit": 11091,
        "src": "25:25:85",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../../Initializable.sol",
        "id": 11094,
        "nodeType": "ImportDirective",
        "scope": 11226,
        "sourceUnit": 1408,
        "src": "51:33:85",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11096,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1407,
              "src": "409:13:85",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1407",
                "typeString": "contract Initializable"
              }
            },
            "id": 11097,
            "nodeType": "InheritanceSpecifier",
            "src": "409:13:85"
          }
        ],
        "contractDependencies": [
          1407
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 11095,
          "nodeType": "StructuredDocumentation",
          "src": "86:285:85",
          "text": "@dev A token holder contract that will allow a beneficiary to extract the\ntokens after a given release time.\n * Useful for simple vesting schedules like \"advisors get all of their tokens\nafter 1 year\".\n * For a more complete vesting schedule, see {TokenVesting}."
        },
        "fullyImplemented": true,
        "id": 11225,
        "linearizedBaseContracts": [
          11225,
          1407
        ],
        "name": "TokenTimelockUpgradeSafe",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 11100,
            "libraryName": {
              "contractScope": null,
              "id": 11098,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 11090,
              "src": "435:9:85",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$11090",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "429:27:85",
            "typeName": {
              "contractScope": null,
              "id": 11099,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10862,
              "src": "449:6:85",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$10862",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "constant": false,
            "id": 11102,
            "mutability": "mutable",
            "name": "_token",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 11225,
            "src": "507:21:85",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC20_$10862",
              "typeString": "contract IERC20"
            },
            "typeName": {
              "contractScope": null,
              "id": 11101,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10862,
              "src": "507:6:85",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$10862",
                "typeString": "contract IERC20"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11104,
            "mutability": "mutable",
            "name": "_beneficiary",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 11225,
            "src": "588:28:85",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 11103,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "588:7:85",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 11106,
            "mutability": "mutable",
            "name": "_releaseTime",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 11225,
            "src": "670:28:85",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 11105,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "670:7:85",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 11123,
              "nodeType": "Block",
              "src": "813:80:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11118,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11108,
                        "src": "854:5:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$10862",
                          "typeString": "contract IERC20"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11119,
                        "name": "beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11110,
                        "src": "861:11:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11120,
                        "name": "releaseTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11112,
                        "src": "874:11:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IERC20_$10862",
                          "typeString": "contract IERC20"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11117,
                      "name": "__TokenTimelock_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11156,
                      "src": "823:30:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10862_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 11121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "823:63:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11122,
                  "nodeType": "ExpressionStatement",
                  "src": "823:63:85"
                }
              ]
            },
            "documentation": null,
            "id": 11124,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 11115,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11114,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "801:11:85",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "801:11:85"
              }
            ],
            "name": "__TokenTimelock_init",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11113,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11108,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11124,
                  "src": "736:12:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$10862",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11107,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 10862,
                    "src": "736:6:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$10862",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11110,
                  "mutability": "mutable",
                  "name": "beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11124,
                  "src": "750:19:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11109,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "750:7:85",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11112,
                  "mutability": "mutable",
                  "name": "releaseTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11124,
                  "src": "771:19:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11111,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "735:56:85"
            },
            "returnParameters": {
              "id": 11116,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "813:0:85"
            },
            "scope": 11225,
            "src": "706:187:85",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11155,
              "nodeType": "Block",
              "src": "1016:262:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11139,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11136,
                          "name": "releaseTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11130,
                          "src": "1090:11:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11137,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "1104:5:85",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 11138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1104:15:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1090:29:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e54696d656c6f636b3a2072656c656173652074696d65206973206265666f72652063757272656e742074696d65",
                        "id": 11140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1121:52:85",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e1658b776de3735ba90dc86438c12854f3617d6d488d64009fdab5928e27c313",
                          "typeString": "literal_string \"TokenTimelock: release time is before current time\""
                        },
                        "value": "TokenTimelock: release time is before current time"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e1658b776de3735ba90dc86438c12854f3617d6d488d64009fdab5928e27c313",
                          "typeString": "literal_string \"TokenTimelock: release time is before current time\""
                        }
                      ],
                      "id": 11135,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1082:7:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1082:92:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11142,
                  "nodeType": "ExpressionStatement",
                  "src": "1082:92:85"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11145,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11143,
                      "name": "_token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11102,
                      "src": "1184:6:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$10862",
                        "typeString": "contract IERC20"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11144,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11126,
                      "src": "1193:5:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IERC20_$10862",
                        "typeString": "contract IERC20"
                      }
                    },
                    "src": "1184:14:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$10862",
                      "typeString": "contract IERC20"
                    }
                  },
                  "id": 11146,
                  "nodeType": "ExpressionStatement",
                  "src": "1184:14:85"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11149,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11147,
                      "name": "_beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11104,
                      "src": "1208:12:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11148,
                      "name": "beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11128,
                      "src": "1223:11:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1208:26:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 11150,
                  "nodeType": "ExpressionStatement",
                  "src": "1208:26:85"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11153,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11151,
                      "name": "_releaseTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11106,
                      "src": "1244:12:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11152,
                      "name": "releaseTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11130,
                      "src": "1259:11:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1244:26:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11154,
                  "nodeType": "ExpressionStatement",
                  "src": "1244:26:85"
                }
              ]
            },
            "documentation": null,
            "id": 11156,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 11133,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11132,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "1004:11:85",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1004:11:85"
              }
            ],
            "name": "__TokenTimelock_init_unchained",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11131,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11126,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11156,
                  "src": "939:12:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$10862",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11125,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 10862,
                    "src": "939:6:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$10862",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11128,
                  "mutability": "mutable",
                  "name": "beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11156,
                  "src": "953:19:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11127,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "953:7:85",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11130,
                  "mutability": "mutable",
                  "name": "releaseTime",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11156,
                  "src": "974:19:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11129,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "974:7:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "938:56:85"
            },
            "returnParameters": {
              "id": 11134,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1016:0:85"
            },
            "scope": 11225,
            "src": "899:379:85",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11164,
              "nodeType": "Block",
              "src": "1384:30:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11162,
                    "name": "_token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11102,
                    "src": "1401:6:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$10862",
                      "typeString": "contract IERC20"
                    }
                  },
                  "functionReturnParameters": 11161,
                  "id": 11163,
                  "nodeType": "Return",
                  "src": "1394:13:85"
                }
              ]
            },
            "documentation": {
              "id": 11157,
              "nodeType": "StructuredDocumentation",
              "src": "1285:48:85",
              "text": "@return the token being held."
            },
            "functionSelector": "fc0c546a",
            "id": 11165,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "token",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11158,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1352:2:85"
            },
            "returnParameters": {
              "id": 11161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11160,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11165,
                  "src": "1376:6:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20_$10862",
                    "typeString": "contract IERC20"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11159,
                    "name": "IERC20",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 10862,
                    "src": "1376:6:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20_$10862",
                      "typeString": "contract IERC20"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1375:8:85"
            },
            "scope": 11225,
            "src": "1338:76:85",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11173,
              "nodeType": "Block",
              "src": "1535:36:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11171,
                    "name": "_beneficiary",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11104,
                    "src": "1552:12:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 11170,
                  "id": 11172,
                  "nodeType": "Return",
                  "src": "1545:19:85"
                }
              ]
            },
            "documentation": {
              "id": 11166,
              "nodeType": "StructuredDocumentation",
              "src": "1420:57:85",
              "text": "@return the beneficiary of the tokens."
            },
            "functionSelector": "38af3eed",
            "id": 11174,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beneficiary",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11167,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1502:2:85"
            },
            "returnParameters": {
              "id": 11170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11169,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11174,
                  "src": "1526:7:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1526:7:85",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1525:9:85"
            },
            "scope": 11225,
            "src": "1482:89:85",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11182,
              "nodeType": "Block",
              "src": "1700:36:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11180,
                    "name": "_releaseTime",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11106,
                    "src": "1717:12:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 11179,
                  "id": 11181,
                  "nodeType": "Return",
                  "src": "1710:19:85"
                }
              ]
            },
            "documentation": {
              "id": 11175,
              "nodeType": "StructuredDocumentation",
              "src": "1577:65:85",
              "text": "@return the time when the tokens are released."
            },
            "functionSelector": "b91d4001",
            "id": 11183,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "releaseTime",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11176,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1667:2:85"
            },
            "returnParameters": {
              "id": 11179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11178,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 11183,
                  "src": "1691:7:85",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11177,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1691:7:85",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1690:9:85"
            },
            "scope": 11225,
            "src": "1647:89:85",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11219,
              "nodeType": "Block",
              "src": "1857:344:85",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11188,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "1929:5:85",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 11189,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1929:15:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11190,
                          "name": "_releaseTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11106,
                          "src": "1948:12:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "1929:31:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206265666f72652072656c656173652074696d65",
                        "id": 11192,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1962:52:85",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0345c6084b4d4be2f1249aa1f58ddc5a11b524aacb744b63dfad68c56d61fad0",
                          "typeString": "literal_string \"TokenTimelock: current time is before release time\""
                        },
                        "value": "TokenTimelock: current time is before release time"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0345c6084b4d4be2f1249aa1f58ddc5a11b524aacb744b63dfad68c56d61fad0",
                          "typeString": "literal_string \"TokenTimelock: current time is before release time\""
                        }
                      ],
                      "id": 11187,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1921:7:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1921:94:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11194,
                  "nodeType": "ExpressionStatement",
                  "src": "1921:94:85"
                },
                {
                  "assignments": [
                    11196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11196,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 11219,
                      "src": "2026:14:85",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11195,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2026:7:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11204,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11201,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2068:4:85",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_TokenTimelockUpgradeSafe_$11225",
                              "typeString": "contract TokenTimelockUpgradeSafe"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_TokenTimelockUpgradeSafe_$11225",
                              "typeString": "contract TokenTimelockUpgradeSafe"
                            }
                          ],
                          "id": 11200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2060:7:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 11199,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2060:7:85",
                            "typeDescriptions": {
                              "typeIdentifier": null,
                              "typeString": null
                            }
                          }
                        },
                        "id": 11202,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2060:13:85",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11197,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11102,
                        "src": "2043:6:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$10862",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 11198,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10801,
                      "src": "2043:16:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view external returns (uint256)"
                      }
                    },
                    "id": 11203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2043:31:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2026:48:85"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11206,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11196,
                          "src": "2092:6:85",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 11207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2101:1:85",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2092:10:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c65617365",
                        "id": 11209,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2104:37:85",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fd167cd15f7f49233a4aac5b2fadd1b9f782ba42f4eadaf31348954b9436eae8",
                          "typeString": "literal_string \"TokenTimelock: no tokens to release\""
                        },
                        "value": "TokenTimelock: no tokens to release"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fd167cd15f7f49233a4aac5b2fadd1b9f782ba42f4eadaf31348954b9436eae8",
                          "typeString": "literal_string \"TokenTimelock: no tokens to release\""
                        }
                      ],
                      "id": 11205,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2084:7:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2084:58:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11211,
                  "nodeType": "ExpressionStatement",
                  "src": "2084:58:85"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11215,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11104,
                        "src": "2173:12:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11216,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11196,
                        "src": "2187:6:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11212,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11102,
                        "src": "2153:6:85",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$10862",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 11214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "safeTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10896,
                      "src": "2153:19:85",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$10862_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$10862_$",
                        "typeString": "function (contract IERC20,address,uint256)"
                      }
                    },
                    "id": 11217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2153:41:85",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11218,
                  "nodeType": "ExpressionStatement",
                  "src": "2153:41:85"
                }
              ]
            },
            "documentation": {
              "id": 11184,
              "nodeType": "StructuredDocumentation",
              "src": "1742:76:85",
              "text": "@notice Transfers tokens held by timelock to beneficiary."
            },
            "functionSelector": "86d1a69f",
            "id": 11220,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "release",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 11185,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1839:2:85"
            },
            "returnParameters": {
              "id": 11186,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1857:0:85"
            },
            "scope": 11225,
            "src": "1823:378:85",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 11224,
            "mutability": "mutable",
            "name": "__gap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 11225,
            "src": "2207:25:85",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$47_storage",
              "typeString": "uint256[47]"
            },
            "typeName": {
              "baseType": {
                "id": 11221,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2207:7:85",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 11223,
              "length": {
                "argumentTypes": null,
                "hexValue": "3437",
                "id": 11222,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "2215:2:85",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_47_by_1",
                  "typeString": "int_const 47"
                },
                "value": "47"
              },
              "nodeType": "ArrayTypeName",
              "src": "2207:11:85",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$47_storage_ptr",
                "typeString": "uint256[47]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 11226,
        "src": "372:1863:85"
      }
    ],
    "src": "0:2236:85"
  },
  "bytecode": "0x608060405234801561001057600080fd5b506104e7806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806338af3eed1461005157806386d1a69f14610075578063b91d40011461007f578063fc0c546a14610099575b600080fd5b6100596100a1565b604080516001600160a01b039092168252519081900360200190f35b61007d6100b0565b005b6100876101cc565b60408051918252519081900360200190f35b6100596101d2565b6034546001600160a01b031690565b6035544210156100f15760405162461bcd60e51b81526004018080602001828103825260328152602001806104336032913960400191505060405180910390fd5b603354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561013c57600080fd5b505afa158015610150573d6000803e3d6000fd5b505050506040513d602081101561016657600080fd5b50519050806101a65760405162461bcd60e51b815260040180806020018281038252602381526020018061048f6023913960400191505060405180910390fd5b6034546033546101c9916001600160a01b0391821691168363ffffffff6101e116565b50565b60355490565b6033546001600160a01b031690565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610233908490610238565b505050565b61024a826001600160a01b03166103f6565b61029b576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106102d95780518252601f1990920191602091820191016102ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461033b576040519150601f19603f3d011682016040523d82523d6000602084013e610340565b606091505b509150915081610397576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156103f0578080602001905160208110156103b357600080fd5b50516103f05760405162461bcd60e51b815260040180806020018281038252602a815260200180610465602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061042a57508115155b94935050505056fe546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206265666f72652072656c656173652074696d655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c65617365a2646970667358221220c88bf7bec39cfd2f2766de70f1dd1b9e488f8f4e4d6411a198f2c6278ca342b264736f6c63430006070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806338af3eed1461005157806386d1a69f14610075578063b91d40011461007f578063fc0c546a14610099575b600080fd5b6100596100a1565b604080516001600160a01b039092168252519081900360200190f35b61007d6100b0565b005b6100876101cc565b60408051918252519081900360200190f35b6100596101d2565b6034546001600160a01b031690565b6035544210156100f15760405162461bcd60e51b81526004018080602001828103825260328152602001806104336032913960400191505060405180910390fd5b603354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561013c57600080fd5b505afa158015610150573d6000803e3d6000fd5b505050506040513d602081101561016657600080fd5b50519050806101a65760405162461bcd60e51b815260040180806020018281038252602381526020018061048f6023913960400191505060405180910390fd5b6034546033546101c9916001600160a01b0391821691168363ffffffff6101e116565b50565b60355490565b6033546001600160a01b031690565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610233908490610238565b505050565b61024a826001600160a01b03166103f6565b61029b576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106102d95780518252601f1990920191602091820191016102ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461033b576040519150601f19603f3d011682016040523d82523d6000602084013e610340565b606091505b509150915081610397576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156103f0578080602001905160208110156103b357600080fd5b50516103f05760405162461bcd60e51b815260040180806020018281038252602a815260200180610465602a913960400191505060405180910390fd5b50505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061042a57508115155b94935050505056fe546f6b656e54696d656c6f636b3a2063757272656e742074696d65206973206265666f72652072656c656173652074696d655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564546f6b656e54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c65617365a2646970667358221220c88bf7bec39cfd2f2766de70f1dd1b9e488f8f4e4d6411a198f2c6278ca342b264736f6c63430006070033",
  "compiler": {
    "name": "solc",
    "version": "0.6.7+commit.b8d736ae.Emscripten.clang",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
