{
    "type": "object",
    "properties": {
        "inputs": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/CommandInputParameter"
            }
        },
        "outputs": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/CommandOutputParameter"
            }
        },
        "hints": {
            "type": "array",
            "items": {}
        },
        "class": {
            "type": "string",
            "enum": [
                "CommandLineTool"
            ]
        },
        "baseCommand": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/Expression"
                },
                {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "$ref": "#/definitions/Expression"
                            }
                        ]
                    }
                }
            ]
        },
        "arguments": {
            "type": "array",
            "items": {
                "anyOf": [
                    {
                        "type": "string"
                    },
                    {
                        "$ref": "#/definitions/CommandLineBinding"
                    }
                ]
            }
        },
        "stdin": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/Expression"
                }
            ]
        },
        "stdout": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/Expression"
                }
            ]
        },
        "successCodes": {
            "type": "array",
            "items": {
                "type": "number"
            }
        },
        "temporaryFailCodes": {
            "type": "array",
            "items": {
                "type": "number"
            }
        },
        "permanentFailCodes": {
            "type": "array",
            "items": {
                "type": "number"
            }
        },
        "id": {
            "type": "string"
        },
        "requirements": {
            "type": "array",
            "items": {
                "anyOf": [
                    {
                        "$ref": "#/definitions/DockerRequirement"
                    },
                    {
                        "$ref": "#/definitions/SubworkflowFeatureRequirement"
                    },
                    {
                        "$ref": "#/definitions/CreateFileRequirement"
                    },
                    {
                        "$ref": "#/definitions/EnvVarRequirement"
                    },
                    {
                        "$ref": "#/definitions/ScatterFeatureRequirement"
                    },
                    {
                        "$ref": "#/definitions/SchemaDefRequirement"
                    },
                    {
                        "$ref": "#/definitions/ExpressionEngineRequirement"
                    }
                ]
            }
        },
        "label": {
            "type": "string"
        },
        "description": {
            "type": "string"
        },
        "cwlVersion": {
            "$ref": "#/definitions/CWLVersions",
            "description": "CWL document version"
        },
        "sbg:modifiedBy": {
            "type": "string"
        },
        "sbg:revisionInfo": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/SBGRevision"
            }
        },
        "sbg:revision": {
            "type": "number"
        },
        "sbg:createdBy": {
            "type": "string"
        },
        "sbg:id": {
            "type": "string"
        },
        "sbg:contributors": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "sbg:sbgMaintained": {
            "type": "boolean"
        },
        "sbg:project": {
            "type": "string"
        },
        "sbg:validationErrors": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "sbg:modifiedOn": {
            "type": "number"
        },
        "sbg:revisionNotes": {
            "type": ["string", "null"]
        },
        "sbg:toolkit": {
            "type": "string"
        },
        "sbg:toolkitVersion": {
            "type": "string"
        },
        "sbg:links": {
            "type": "array",
            "items": {
                "$ref": "#/definitions/SBGLink"
            }
        },
        "sbg:toolAuthor": {
            "type": "string"
        },
        "sbg:license": {
            "type": "string"
        },
        "sbg:categories": {
            "type": "array",
            "items": {
                "type": "string"
            }
        }
    },
    "required": [
        "inputs",
        "outputs",
        "class"
    ],
    "definitions": {
        "CommandInputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "sbg:category": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "CommandInputSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "CommandLineBinding": {
            "type": "object",
            "properties": {
                "position": {
                    "type": "number"
                },
                "prefix": {
                    "type": "string"
                },
                "separate": {
                    "type": "boolean"
                },
                "itemSeparator": {
                    "type": ["string", "null"]
                },
                "valueFrom": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "loadContents": {
                    "type": "boolean"
                },
                "secondaryFiles": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        },
        "Expression": {
            "type": "object",
            "properties": {
                "engine": {
                    "type": "string"
                },
                "script": {
                    "type": "string"
                },
                "class": {
                    "type": "string",
                    "enum": [
                        "Expression"
                    ]
                }
            },
            "required": [
                "engine",
                "script",
                "class"
            ]
        },
        "CommandInputMapSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "map"
                    ]
                },
                "values": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "values"
            ]
        },
        "CommandInputArraySchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandInputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandInputEnumSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandInputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "array"
                    ]
                }
            },
            "required": [
                "items",
                "type"
            ]
        },
        "CommandInputRecordSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "record"
                    ]
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/CommandInputSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputArraySchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputRecordSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputEnumSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandInputMapSchema"
                            }
                        ]
                    }
                }
            },
            "required": [
                "type",
                "fields"
            ]
        },
        "CommandInputEnumSchema": {
            "type": "object",
            "properties": {
                "inputBinding": {
                    "$ref": "#/definitions/CommandLineBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "enum"
                    ]
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "name": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "symbols",
                "name"
            ]
        },
        "CommandOutputParameter": {
            "type": "object",
            "properties": {
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "id": {
                    "type": "string"
                },
                "label": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "streamable": {
                    "type": "boolean"
                },
                "default": {},
                "sbg:fileTypes": {
                    "type": "string"
                }
            },
            "required": [
                "id"
            ]
        },
        "CommandOutputSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputEnumSchema"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputRecordSchema"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "required": [
                "type"
            ]
        },
        "CommandOutputBinding": {
            "type": "object",
            "properties": {
                "glob": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "outputEval": {
                    "$ref": "#/definitions/Expression"
                },
                "sbg:inheritMetadataFrom": {
                    "type": "string"
                },
                "sbg:metadata": {
                    "type": "object",
                    "additionalProperties": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "$ref": "#/definitions/Expression"
                            }
                        ]
                    }
                },
                "loadContents": {
                    "type": "boolean"
                },
                "secondaryFiles": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string"
                                    },
                                    {
                                        "$ref": "#/definitions/Expression"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        },
        "CommandOutputMapSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "map"
                    ]
                },
                "values": {
                    "type": "string"
                }
            },
            "required": [
                "type",
                "values"
            ]
        },
        "CommandOutputArraySchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "items": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "null"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "boolean"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "int"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "long"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "float"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "double"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "bytes"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "string"
                            ]
                        },
                        {
                            "type": "string",
                            "enum": [
                                "File"
                            ]
                        },
                        {
                            "$ref": "#/definitions/CommandOutputSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputMapSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputArraySchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputRecordSchema"
                        },
                        {
                            "$ref": "#/definitions/CommandOutputEnumSchema"
                        },
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "anyOf": [
                                    {
                                        "type": "string",
                                        "enum": [
                                            "null"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "boolean"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "int"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "long"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "float"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "double"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "bytes"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "string"
                                        ]
                                    },
                                    {
                                        "type": "string",
                                        "enum": [
                                            "File"
                                        ]
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputMapSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputArraySchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputEnumSchema"
                                    },
                                    {
                                        "$ref": "#/definitions/CommandOutputRecordSchema"
                                    },
                                    {
                                        "type": "string"
                                    }
                                ]
                            }
                        }
                    ]
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "array"
                    ]
                }
            },
            "required": [
                "items",
                "type"
            ]
        },
        "CommandOutputRecordSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "record"
                    ]
                },
                "fields": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/CommandOutputSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputArraySchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputRecordSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputEnumSchema"
                            },
                            {
                                "$ref": "#/definitions/CommandOutputMapSchema"
                            }
                        ]
                    }
                }
            },
            "required": [
                "type",
                "fields"
            ]
        },
        "CommandOutputEnumSchema": {
            "type": "object",
            "properties": {
                "outputBinding": {
                    "$ref": "#/definitions/CommandOutputBinding"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "enum"
                    ]
                },
                "symbols": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "type",
                "symbols"
            ]
        },
        "DockerRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "DockerRequirement"
                    ]
                },
                "dockerPull": {
                    "type": "string"
                },
                "dockerLoad": {
                    "type": "string"
                },
                "dockerFile": {
                    "type": "string"
                },
                "dockerImageId": {
                    "type": "string"
                },
                "dockerOutputDirectory": {
                    "type": "string"
                }
            },
            "required": [
                "class"
            ]
        },
        "SubworkflowFeatureRequirement": {
            "type": "object",
            "properties": {}
        },
        "CreateFileRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "CreateFileRequirement"
                    ]
                },
                "fileDef": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/FileDef"
                    }
                }
            },
            "required": [
                "class",
                "fileDef"
            ]
        },
        "FileDef": {
            "type": "object",
            "properties": {
                "filename": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                },
                "fileContent": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "$ref": "#/definitions/Expression"
                        }
                    ]
                }
            },
            "required": [
                "filename",
                "fileContent"
            ]
        },
        "EnvVarRequirement": {
            "type": "object",
            "properties": {}
        },
        "ScatterFeatureRequirement": {
            "type": "object",
            "properties": {}
        },
        "SchemaDefRequirement": {
            "type": "object",
            "properties": {}
        },
        "ExpressionEngineRequirement": {
            "type": "object",
            "properties": {
                "class": {
                    "type": "string",
                    "enum": [
                        "ExpressionEngineRequirement"
                    ]
                },
                "id": {
                    "type": "string"
                },
                "requirements": {
                    "type": "array",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/DockerRequirement"
                            },
                            {
                                "$ref": "#/definitions/SubworkflowFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/CreateFileRequirement"
                            },
                            {
                                "$ref": "#/definitions/EnvVarRequirement"
                            },
                            {
                                "$ref": "#/definitions/ScatterFeatureRequirement"
                            },
                            {
                                "$ref": "#/definitions/SchemaDefRequirement"
                            },
                            {
                                "$ref": "#/definitions/ExpressionEngineRequirement"
                            }
                        ]
                    }
                },
                "engineCommand": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "array",
                            "items": {
                                "type": "string"
                            }
                        }
                    ]
                },
                "engineConfig": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            },
            "required": [
                "class",
                "id"
            ]
        },
        "SBGRevision": {
            "type": "object",
            "properties": {
                "sbg:revision": {
                    "type": "number"
                },
                "sbg:modifiedBy": {
                    "type": "string"
                },
                "sbg:revisionNotes": {
                    "type": ["string", "null"]
                },
                "sbg:modifiedOn": {
                    "type": "number"
                }
            },
            "required": [
                "sbg:revision",
                "sbg:modifiedBy",
                "sbg:revisionNotes",
                "sbg:modifiedOn"
            ]
        },
        "SBGLink": {
            "type": "object",
            "properties": {
                "label": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            },
            "required": [
                "label",
                "id"
            ]
        },
        "CWLVersions": {
            "type": "string",
            "enum": [
                "sbg:draft-2"
            ]
        }
    },
    "$schema": "http://json-schema.org/draft-04/schema#"
}
