diff --git a/.gradle/6.8/executionHistory/executionHistory.bin b/.gradle/6.8/executionHistory/executionHistory.bin
index ffab960dc1f554d2837a9906cd3de687d5d022ad..a499544384f3abbdc40b9561ceefff3753b3016b 100644
Binary files a/.gradle/6.8/executionHistory/executionHistory.bin and b/.gradle/6.8/executionHistory/executionHistory.bin differ
diff --git a/.gradle/6.8/executionHistory/executionHistory.lock b/.gradle/6.8/executionHistory/executionHistory.lock
index c0602a52accc5782ea61c5d64529ca8301ab2c00..59ea3d89546ac9cc38d3a8072cdddbd5f9c35126 100644
Binary files a/.gradle/6.8/executionHistory/executionHistory.lock and b/.gradle/6.8/executionHistory/executionHistory.lock differ
diff --git a/.gradle/6.8/fileHashes/fileHashes.bin b/.gradle/6.8/fileHashes/fileHashes.bin
index 2b24e898e3dffcdc620416fb863461b44bb11339..f30fa9596b32845baa38429dc3994ec8e2dd15d5 100644
Binary files a/.gradle/6.8/fileHashes/fileHashes.bin and b/.gradle/6.8/fileHashes/fileHashes.bin differ
diff --git a/.gradle/6.8/fileHashes/fileHashes.lock b/.gradle/6.8/fileHashes/fileHashes.lock
index f7069599a742f78b42e0afd0e5d7412fb1f15cbc..21d91eace8079df466ca307e4dcde4cd7b8f22c1 100644
Binary files a/.gradle/6.8/fileHashes/fileHashes.lock and b/.gradle/6.8/fileHashes/fileHashes.lock differ
diff --git a/.gradle/6.8/fileHashes/resourceHashesCache.bin b/.gradle/6.8/fileHashes/resourceHashesCache.bin
index ad8cc79532afd419634d4332784c1b440103b024..81b32a3cf37a2a7cfd402c3d514832dea26b8ac5 100644
Binary files a/.gradle/6.8/fileHashes/resourceHashesCache.bin and b/.gradle/6.8/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/6.8/javaCompile/classAnalysis.bin b/.gradle/6.8/javaCompile/classAnalysis.bin
index 9dadb4773c8bad3f1937fd82af4c06f892b88a84..a7e0e4e7e8ae9d7ee1345318ebc2f6c7f8bcefd6 100644
Binary files a/.gradle/6.8/javaCompile/classAnalysis.bin and b/.gradle/6.8/javaCompile/classAnalysis.bin differ
diff --git a/.gradle/6.8/javaCompile/jarAnalysis.bin b/.gradle/6.8/javaCompile/jarAnalysis.bin
index 6eb85caa5e133a1cfd73295bfdfbda678b798952..efcc0bb0aae97a68b965ff0ecccce97d66c979cc 100644
Binary files a/.gradle/6.8/javaCompile/jarAnalysis.bin and b/.gradle/6.8/javaCompile/jarAnalysis.bin differ
diff --git a/.gradle/6.8/javaCompile/javaCompile.lock b/.gradle/6.8/javaCompile/javaCompile.lock
index c73fbee5fde729b4cbc8e25e5fdecf19ef72723c..b01e4c9381f02895d9d91919b447a4a3c89a7bf3 100644
Binary files a/.gradle/6.8/javaCompile/javaCompile.lock and b/.gradle/6.8/javaCompile/javaCompile.lock differ
diff --git a/.gradle/6.8/javaCompile/taskHistory.bin b/.gradle/6.8/javaCompile/taskHistory.bin
index ec6a3ba5c645e73fb30bb4472d5e1064fd436005..5908545b1ffb6056bb1699e06e1fefed16243906 100644
Binary files a/.gradle/6.8/javaCompile/taskHistory.bin and b/.gradle/6.8/javaCompile/taskHistory.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 4b009fbd78769ba1eb5c2cc8d77dbd72aad7f96e..5074092233a6914190b42f834c58c8e3b895b6a1 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class
index bbafc00bead5f748f5d05c59a62b9a77187a0ab8..48ae3e244a16d4f7eda03a61f45b99951758cdc3 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ASTNode.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class
index 355c6e77d3593438ec23a7bbe977a50ea709dfeb..2b80a03b34d05b692f88091e05647c8b8fe491b2 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Delete.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class
index 44705924060ce907bf00de024c29530b15025d67..2df7717cf9d22f19130a0b4841a419f61185dbb0 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Get.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class
index 59b0b3a31b91e6cb92baaca2fa592ee046662124..6c1f42d202663b957867d3217122ba0d124a79b8 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Head.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class
index 6a6bd1034e9760e821e8f5b3ddae0809d65df9b5..571e0e1a103569df6736cdbfb429b22df713dfdd 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OpenAPIObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class
index c4e68e17cc1c8b5c83dedd72fe59f5e8eade17ba..0354176d216a6f682343d291ca9c3d1235c2adee 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationOb.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class
index 62442c106146b74228612030479cf8dabce6c304..65701bdb3c6e361e6703386d5801c88a6f993c5f 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/OperationObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class
index b475b99ce754c49b4fcc8b4eef0f6d2b9328a469..12e8b784823ef3119be920dec98a205820fb54ed 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Options.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class
index c735aa730843498b274618633dd32d5ee62b9b6b..846fd0a4863b1ee61eba7d99967934c62adf2953 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/ParameterObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class
index f680f1ebd2ad03a4c330e1cf1f4768952676a282..b6566150b3f9f4122597a541cbbfc43447f63f37 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Patch.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class
index 6fe7326c466402b960d4f3232dbd090dce48f0c0..b8d3036127d5729fc7a39ee97ae6fcfc7be49291 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/PathsObject.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class
index d33e7eb467fc48f8c041aba27310294d0f6c3826..73bafd4599843bd81823d2b41379565eaf0aab8b 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Post.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class
index ba73674a9d8eb25f101a2e25cfb758d6a511b28b..a1bead1590236f3dbf6add4b73ccaec962e26dc0 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Put.class differ
diff --git a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class
index df82d8488e72e2cef1dac07efc3c6655f95a8233..07b1212b1c59fa2804e6d55a355a37f2fa0af8b9 100644
Binary files a/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class and b/build/classes/java/main/de/tudresden/inf/st/openapi/ast/Trace.class differ
diff --git a/build/classes/java/test/openapi/OpenAPIMain_test.class b/build/classes/java/test/openapi/OpenAPIMain_test.class
index 8a64de368fe8743d13ff8370cebdac1ea3a4ac8a..862b12ddb39f7be5a4c1e6d041acc9b6a5a27845 100644
Binary files a/build/classes/java/test/openapi/OpenAPIMain_test.class and b/build/classes/java/test/openapi/OpenAPIMain_test.class differ
diff --git a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
index 709702c12c53e2942ab8dd7e59a9c3e297bf07ad..954849eaf255d7bbc0c543f3e745c0dff5bb49b6 100644
--- a/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
+++ b/build/reports/tests/test/classes/openapi.OpenAPIMain_test.html
@@ -29,7 +29,7 @@
 </td>
 <td>
 <div class="infoBox" id="failures">
-<div class="counter">0</div>
+<div class="counter">1</div>
 <p>failures</p>
 </div>
 </td>
@@ -41,7 +41,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">0.633s</div>
+<div class="counter">0.401s</div>
 <p>duration</p>
 </div>
 </td>
@@ -50,8 +50,8 @@
 </div>
 </td>
 <td>
-<div class="infoBox success" id="successRate">
-<div class="percent">100%</div>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
 <p>successful</p>
 </div>
 </td>
@@ -61,16 +61,127 @@
 <div id="tabs">
 <ul class="tabLinks">
 <li>
-<a href="#tab0">Tests</a>
+<a href="#tab0">Failed tests</a>
 </li>
 <li>
-<a href="#tab1">Standard output</a>
+<a href="#tab1">Tests</a>
 </li>
 <li>
-<a href="#tab2">Standard error</a>
+<a href="#tab2">Standard output</a>
 </li>
 </ul>
 <div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<div class="test">
+<a name="test()"></a>
+<h3 class="failures">test()</h3>
+<span class="code">
+<pre>java.lang.NullPointerException
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.survey_OpenAPIObject_schemaTuples(OpenAPIObject.java:1102)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples_compute(OpenAPIObject.java:1232)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples(OpenAPIObject.java:1214)
+	at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:72)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
+	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.stop(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:829)
+</pre>
+</span>
+</div>
+</div>
+<div id="tab1" class="tab">
 <h2>Tests</h2>
 <table>
 <thead>
@@ -81,33 +192,20 @@
 </tr>
 </thead>
 <tr>
-<td class="success">test()</td>
-<td class="success">0.633s</td>
-<td class="success">passed</td>
+<td class="failures">test()</td>
+<td class="failures">0.401s</td>
+<td class="failures">failed</td>
 </tr>
 </table>
 </div>
-<div id="tab1" class="tab">
+<div id="tab2" class="tab">
 <h2>Standard output</h2>
 <span class="code">
-<pre>5
-Loading expression DSL file '1password.com-events-1.0.0.json'.
-Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'.
-Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'.
-Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'.
+<pre>1
 Loading expression DSL file 'petstore-v2.yaml'.
 </pre>
 </span>
 </div>
-<div id="tab2" class="tab">
-<h2>Standard error</h2>
-<span class="code">
-<pre>SLF4J: Failed to load class &quot;org.slf4j.impl.StaticLoggerBinder&quot;.
-SLF4J: Defaulting to no-operation (NOP) logger implementation
-SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
-</pre>
-</span>
-</div>
 </div>
 <div id="footer">
 <p>
@@ -116,7 +214,7 @@ SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further detail
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
index 3f9de5cc7bfd94f859e1c72963dadb0f151a47fd..38a8e8ca45bc1783ebe69e16973647443b064f2d 100644
--- a/build/reports/tests/test/index.html
+++ b/build/reports/tests/test/index.html
@@ -26,7 +26,7 @@
 </td>
 <td>
 <div class="infoBox" id="failures">
-<div class="counter">0</div>
+<div class="counter">1</div>
 <p>failures</p>
 </div>
 </td>
@@ -38,7 +38,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">0.633s</div>
+<div class="counter">0.401s</div>
 <p>duration</p>
 </div>
 </td>
@@ -47,8 +47,8 @@
 </div>
 </td>
 <td>
-<div class="infoBox success" id="successRate">
-<div class="percent">100%</div>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
 <p>successful</p>
 </div>
 </td>
@@ -58,13 +58,25 @@
 <div id="tabs">
 <ul class="tabLinks">
 <li>
-<a href="#tab0">Packages</a>
+<a href="#tab0">Failed tests</a>
+</li>
+<li>
+<a href="#tab1">Packages</a>
 </li>
 <li>
-<a href="#tab1">Classes</a>
+<a href="#tab2">Classes</a>
 </li>
 </ul>
 <div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<ul class="linkList">
+<li>
+<a href="classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a>.
+<a href="classes/openapi.OpenAPIMain_test.html#test()">test()</a>
+</li>
+</ul>
+</div>
+<div id="tab1" class="tab">
 <h2>Packages</h2>
 <table>
 <thead>
@@ -79,19 +91,19 @@
 </thead>
 <tbody>
 <tr>
-<td class="success">
+<td class="failures">
 <a href="packages/openapi.html">openapi</a>
 </td>
 <td>1</td>
+<td>1</td>
 <td>0</td>
-<td>0</td>
-<td>0.633s</td>
-<td class="success">100%</td>
+<td>0.401s</td>
+<td class="failures">0%</td>
 </tr>
 </tbody>
 </table>
 </div>
-<div id="tab1" class="tab">
+<div id="tab2" class="tab">
 <h2>Classes</h2>
 <table>
 <thead>
@@ -106,14 +118,14 @@
 </thead>
 <tbody>
 <tr>
-<td class="success">
+<td class="failures">
 <a href="classes/openapi.OpenAPIMain_test.html">openapi.OpenAPIMain_test</a>
 </td>
 <td>1</td>
+<td>1</td>
 <td>0</td>
-<td>0</td>
-<td>0.633s</td>
-<td class="success">100%</td>
+<td>0.401s</td>
+<td class="failures">0%</td>
 </tr>
 </tbody>
 </table>
@@ -126,7 +138,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/packages/openapi.html b/build/reports/tests/test/packages/openapi.html
index b4f04ceb5f0da60de3dcab160badd3856607b069..bb6322e9dc43bb88bad7bcddb09d92459d0c6913 100644
--- a/build/reports/tests/test/packages/openapi.html
+++ b/build/reports/tests/test/packages/openapi.html
@@ -28,7 +28,7 @@
 </td>
 <td>
 <div class="infoBox" id="failures">
-<div class="counter">0</div>
+<div class="counter">1</div>
 <p>failures</p>
 </div>
 </td>
@@ -40,7 +40,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">0.633s</div>
+<div class="counter">0.401s</div>
 <p>duration</p>
 </div>
 </td>
@@ -49,8 +49,8 @@
 </div>
 </td>
 <td>
-<div class="infoBox success" id="successRate">
-<div class="percent">100%</div>
+<div class="infoBox failures" id="successRate">
+<div class="percent">0%</div>
 <p>successful</p>
 </div>
 </td>
@@ -60,10 +60,22 @@
 <div id="tabs">
 <ul class="tabLinks">
 <li>
-<a href="#tab0">Classes</a>
+<a href="#tab0">Failed tests</a>
+</li>
+<li>
+<a href="#tab1">Classes</a>
 </li>
 </ul>
 <div id="tab0" class="tab">
+<h2>Failed tests</h2>
+<ul class="linkList">
+<li>
+<a href="../classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a>.
+<a href="../classes/openapi.OpenAPIMain_test.html#test()">test()</a>
+</li>
+</ul>
+</div>
+<div id="tab1" class="tab">
 <h2>Classes</h2>
 <table>
 <thread>
@@ -77,14 +89,14 @@
 </tr>
 </thread>
 <tr>
-<td class="success">
+<td class="failures">
 <a href="../classes/openapi.OpenAPIMain_test.html">OpenAPIMain_test</a>
 </td>
 <td>1</td>
+<td>1</td>
 <td>0</td>
-<td>0</td>
-<td>0.633s</td>
-<td class="success">100%</td>
+<td>0.401s</td>
+<td class="failures">0%</td>
 </tr>
 </table>
 </div>
@@ -96,7 +108,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오전 8:15:11</p>
+<a href="http://www.gradle.org">Gradle 6.8</a> at 2021. 10. 9. 오후 10:17:33</p>
 </div>
 </div>
 </body>
diff --git a/build/resources/main/1password.com-events-1.0.0.json b/build/resources/main/1password.com-events-1.0.0.json
deleted file mode 100644
index 503bd16ffec96123ae4000b54e372892f8953977..0000000000000000000000000000000000000000
--- a/build/resources/main/1password.com-events-1.0.0.json
+++ /dev/null
@@ -1,518 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "description": "1Password",
-      "url": "https://events.1password.com"
-    },
-    {
-      "description": "1Password CA",
-      "url": "https://events.1password.ca"
-    },
-    {
-      "description": "1Password EU",
-      "url": "https://events.1password.eu"
-    },
-    {
-      "description": "1Password Enterprise",
-      "url": "https://events.ent.1password.com"
-    }
-  ],
-  "info": {
-    "description": "1Password Events API Specification.",
-    "title": "Events API",
-    "version": "1.0.0",
-    "x-apisguru-categories": [
-      "security"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "1password.com",
-    "x-serviceName": "events"
-  },
-  "paths": {
-    "/api/auth/introspect": {
-      "get": {
-        "operationId": "getAuthIntrospect",
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/IntrospectResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Performs introspection of the provided Bearer JWT token",
-        "tags": [
-          "auth"
-        ]
-      }
-    },
-    "/api/v1/itemusages": {
-      "post": {
-        "description": "This endpoint requires your JSON Web Token to have the *itemusages* feature.",
-        "operationId": "getItemUsages",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/ItemUsagesRequest"
-        },
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/ItemUsagesResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Retrieves item usages",
-        "tags": [
-          "api-v1"
-        ]
-      }
-    },
-    "/api/v1/signinattempts": {
-      "post": {
-        "description": "This endpoint requires your JSON Web Token to have the *signinattempts* feature.",
-        "operationId": "getSignInAttempts",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/SignInAttemptsRequest"
-        },
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/SignInAttemptsResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Retrieves sign-in attempts",
-        "tags": [
-          "api-v1"
-        ]
-      }
-    }
-  },
-  "components": {
-    "examples": {
-      "Cursor": {
-        "summary": "Used for continued calling with a cursor",
-        "value": {
-          "cursor": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK"
-        }
-      },
-      "ResetCursor": {
-        "summary": "Used for reseting the cursor",
-        "value": {
-          "limit": 100,
-          "start_time": "2021-06-11T16:32:50-03:00"
-        }
-      }
-    },
-    "requestBodies": {
-      "CursorRequest": {
-        "content": {
-          "application/json": {
-            "examples": {
-              "Continuing cursor": {
-                "$ref": "#/components/examples/Cursor"
-              },
-              "Resetting cursor": {
-                "$ref": "#/components/examples/ResetCursor"
-              }
-            },
-            "schema": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/Cursor"
-                },
-                {
-                  "$ref": "#/components/schemas/ResetCursor"
-                }
-              ]
-            }
-          }
-        }
-      },
-      "ItemUsagesRequest": {
-        "$ref": "#/components/requestBodies/CursorRequest"
-      },
-      "SignInAttemptsRequest": {
-        "$ref": "#/components/requestBodies/CursorRequest"
-      }
-    },
-    "responses": {
-      "GenericErrorResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Generic error"
-      },
-      "IntrospectResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Introspection"
-            }
-          }
-        },
-        "description": "Introspection object"
-      },
-      "ItemUsagesResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/ItemUsageItems"
-            }
-          }
-        },
-        "description": "Item usages response object"
-      },
-      "SignInAttemptsResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/SignInAttemptItems"
-            }
-          }
-        },
-        "description": "Sign-in attempts response object"
-      },
-      "UnauthorizedErrorResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Unauthorized"
-      }
-    },
-    "schemas": {
-      "Client": {
-        "description": "Metadata gathered about the client",
-        "properties": {
-          "app_name": {
-            "example": "1Password Extension",
-            "type": "string"
-          },
-          "app_version": {
-            "example": "20127",
-            "type": "string"
-          },
-          "ip_address": {
-            "example": "13.227.95.22",
-            "type": "string"
-          },
-          "os_name": {
-            "example": "MacOSX",
-            "type": "string"
-          },
-          "os_version": {
-            "example": "10.15.6",
-            "type": "string"
-          },
-          "platform_name": {
-            "example": "Chrome",
-            "type": "string"
-          },
-          "platform_version": {
-            "description": "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed",
-            "type": "string"
-          }
-        }
-      },
-      "Cursor": {
-        "description": "Cursor",
-        "properties": {
-          "cursor": {
-            "description": "Cursor to fetch more data if available or continue the polling process if required",
-            "example": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK",
-            "type": "string"
-          }
-        }
-      },
-      "CursorCollection": {
-        "allOf": [
-          {
-            "$ref": "#/components/schemas/Cursor"
-          },
-          {
-            "properties": {
-              "has_more": {
-                "description": "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.",
-                "type": "boolean"
-              }
-            }
-          }
-        ],
-        "description": "Common cursor properties for collection responses"
-      },
-      "DateTimeRFC3339": {
-        "example": "2020-06-11T16:32:50-03:00",
-        "format": "date-time",
-        "type": "string"
-      },
-      "Details": {
-        "description": "Additional information about the sign-in attempt",
-        "properties": {
-          "value": {
-            "description": "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt",
-            "example": "Europe",
-            "type": "string"
-          }
-        }
-      },
-      "Error": {
-        "properties": {
-          "Error": {
-            "properties": {
-              "Message": {
-                "description": "The error message.",
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        },
-        "type": "object"
-      },
-      "Introspection": {
-        "properties": {
-          "Features": {
-            "example": [
-              "itemusages",
-              "signinattempts"
-            ],
-            "items": {
-              "type": "string"
-            },
-            "type": "array"
-          },
-          "IssuedAt": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "UUID": {
-            "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ItemUsage": {
-        "description": "A single item usage object",
-        "properties": {
-          "client": {
-            "$ref": "#/components/schemas/Client"
-          },
-          "item_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "timestamp": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "used_version": {
-            "type": "integer"
-          },
-          "user": {
-            "$ref": "#/components/schemas/User"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "vault_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      },
-      "ItemUsageItems": {
-        "allOf": [
-          {
-            "properties": {
-              "items": {
-                "items": {
-                  "$ref": "#/components/schemas/ItemUsage"
-                },
-                "type": "array"
-              }
-            }
-          },
-          {
-            "$ref": "#/components/schemas/CursorCollection"
-          }
-        ],
-        "description": "An object wrapping cursor properties and a list of items usages"
-      },
-      "ResetCursor": {
-        "description": "Reset cursor",
-        "properties": {
-          "end_time": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "limit": {
-            "maximum": 1000,
-            "minimum": 1,
-            "type": "number"
-          },
-          "start_time": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          }
-        }
-      },
-      "SignInAttempt": {
-        "description": "A single sign-in attempt object",
-        "properties": {
-          "category": {
-            "enum": [
-              "success",
-              "credentials_failed",
-              "mfa_failed",
-              "modern_version_failed",
-              "firewall_failed",
-              "firewall_reported_success"
-            ],
-            "example": "firewall_failed",
-            "type": "string"
-          },
-          "client": {
-            "$ref": "#/components/schemas/Client"
-          },
-          "country": {
-            "description": "Country ISO Code",
-            "example": "France",
-            "type": "string"
-          },
-          "details": {
-            "$ref": "#/components/schemas/Details"
-          },
-          "session_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "target_user": {
-            "$ref": "#/components/schemas/User"
-          },
-          "timestamp": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "type": {
-            "enum": [
-              "credentials_ok",
-              "mfa_ok",
-              "password_secret_bad",
-              "mfa_missing",
-              "totp_disabled",
-              "totp_bad",
-              "totp_timeout",
-              "u2f_disabled",
-              "u2f_bad",
-              "u2f_timout",
-              "duo_disabled",
-              "duo_bad",
-              "duo_timeout",
-              "duo_native_bad",
-              "platform_secret_disabled",
-              "platform_secret_bad",
-              "platform_secret_proxy",
-              "code_disabled",
-              "code_bad",
-              "code_timeout",
-              "ip_blocked",
-              "continent_blocked",
-              "country_blocked",
-              "anonymous_blocked",
-              "all_blocked",
-              "modern_version_missing",
-              "modern_version_old"
-            ],
-            "example": "continent_blocked",
-            "type": "string"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      },
-      "SignInAttemptItems": {
-        "allOf": [
-          {
-            "properties": {
-              "items": {
-                "items": {
-                  "$ref": "#/components/schemas/SignInAttempt"
-                },
-                "type": "array"
-              }
-            }
-          },
-          {
-            "$ref": "#/components/schemas/CursorCollection"
-          }
-        ],
-        "description": "An object wrapping cursor properties and a list of sign-in attempts"
-      },
-      "UUID": {
-        "example": "56YE2TYN2VFYRLNSHKPW5NVT5E",
-        "type": "string"
-      },
-      "User": {
-        "description": "User object",
-        "properties": {
-          "email": {
-            "format": "email",
-            "type": "string"
-          },
-          "name": {
-            "description": "Full name",
-            "example": "Jack O'Neill",
-            "type": "string"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      }
-    },
-    "securitySchemes": {
-      "jwtsa": {
-        "bearerFormat": "JWT-SA",
-        "description": "A JWT SA token issued to this service",
-        "scheme": "bearer",
-        "type": "http"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/build/resources/main/6-dot-authentiqio.appspot.com-6.json b/build/resources/main/6-dot-authentiqio.appspot.com-6.json
deleted file mode 100644
index a59849b181dd559f4edf09085625cf2d19a901ee..0000000000000000000000000000000000000000
--- a/build/resources/main/6-dot-authentiqio.appspot.com-6.json
+++ /dev/null
@@ -1,998 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "url": "https://6-dot-authentiqio.appspot.com"
-    }
-  ],
-  "info": {
-    "contact": {
-      "email": "hello@authentiq.com",
-      "name": "Authentiq team",
-      "url": "http://authentiq.io/support"
-    },
-    "description": "Strong authentication, without the passwords.",
-    "license": {
-      "name": "Apache 2.0",
-      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
-    },
-    "termsOfService": "http://authentiq.com/terms/",
-    "title": "Authentiq API",
-    "version": "6",
-    "x-apisguru-categories": [
-      "security"
-    ],
-    "x-logo": {
-      "backgroundColor": "#F26641",
-      "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "6-dot-authentiqio.appspot.com"
-  },
-  "paths": {
-    "/key": {
-      "delete": {
-        "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n",
-        "operationId": "key_revoke_nosecret",
-        "parameters": [
-          {
-            "description": "primary email associated to Key (ID)",
-            "in": "query",
-            "name": "email",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "description": "primary phone number, international representation",
-            "in": "query",
-            "name": "phone",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "description": "verification code sent by email",
-            "in": "query",
-            "name": "code",
-            "required": false,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "pending or done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully deleted"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Authentication error `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Confirm with code sent `confirm-first`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "delete"
-        ]
-      },
-      "post": {
-        "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_register",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "201": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "secret": {
-                      "description": "revoke key",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "registered",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully registered"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key already registered `duplicate-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "post"
-        ]
-      }
-    },
-    "/key/{PK}": {
-      "delete": {
-        "description": "Revoke an Identity (Key) with a revocation secret",
-        "operationId": "key_revoke",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          },
-          {
-            "description": "revokation secret",
-            "in": "query",
-            "name": "secret",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key not found / wrong code `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "delete"
-        ]
-      },
-      "get": {
-        "description": "Get public details of an Authentiq ID.\n",
-        "operationId": "key_retrieve",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "since": {
-                      "format": "date-time",
-                      "type": "string"
-                    },
-                    "status": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully retrieved"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "410": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key is revoked (gone). `revoked-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "get"
-        ]
-      },
-      "head": {
-        "description": "HEAD info on Authentiq ID\n",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Key exists"
-          },
-          "404": {
-            "content": {
-              "*/*": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "410": {
-            "content": {
-              "*/*": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key is revoked `revoked-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "head"
-        ]
-      },
-      "post": {
-        "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_update",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "post"
-        ]
-      },
-      "put": {
-        "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_bind",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Already bound to another key `duplicate-hash`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "put"
-        ]
-      }
-    },
-    "/login": {
-      "post": {
-        "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "push_login_request",
-        "parameters": [
-          {
-            "description": "URI App will connect to",
-            "in": "query",
-            "name": "callback",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "requestBody": {
-          "content": {
-            "application/jwt": {
-              "schema": {
-                "$ref": "#/components/schemas/PushToken"
-              }
-            }
-          },
-          "description": "Push Token.",
-          "required": true
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "sent",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "login",
-          "post"
-        ]
-      }
-    },
-    "/scope": {
-      "post": {
-        "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "sign_request",
-        "parameters": [
-          {
-            "description": "test only mode, using test issuer",
-            "in": "query",
-            "name": "test",
-            "required": false,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "requestBody": {
-          "content": {
-            "application/jwt": {
-              "schema": {
-                "$ref": "#/components/schemas/Claims"
-              }
-            }
-          },
-          "description": "Claims of scope",
-          "required": true
-        },
-        "responses": {
-          "201": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "job": {
-                      "description": "20-character ID",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "waiting",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "429": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Too Many Requests on same address / number `rate-limit`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "post"
-        ]
-      }
-    },
-    "/scope/{job}": {
-      "delete": {
-        "description": "delete a verification job",
-        "operationId": "sign_delete",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully deleted"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "delete"
-        ]
-      },
-      "get": {
-        "description": "get the status / current content of a verification job",
-        "operationId": "sign_retrieve",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "exp": {
-                      "type": "integer"
-                    },
-                    "field": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              },
-              "application/jwt": {
-                "schema": {
-                  "properties": {
-                    "exp": {
-                      "type": "integer"
-                    },
-                    "field": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response (JWT)"
-          },
-          "204": {
-            "description": "Confirmed, waiting for signing"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              },
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "get"
-        ]
-      },
-      "head": {
-        "description": "HEAD to get the status of a verification job",
-        "operationId": "sign_retrieve_head",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Confirmed and signed"
-          },
-          "204": {
-            "description": "Confirmed, waiting for signing"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "head"
-        ]
-      },
-      "post": {
-        "description": "this is a scope confirmation",
-        "operationId": "sign_confirm",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "202": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully confirmed"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Confirmation error `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "405": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "JWT POSTed to scope `not-supported`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "post"
-        ]
-      },
-      "put": {
-        "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "sign_update",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "properties": {
-                    "jwt": {
-                      "description": "result is JWT or JSON??",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "ready",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "409": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not confirmed yet `confirm-first`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "put"
-        ]
-      }
-    }
-  },
-  "components": {
-    "parameters": {
-      "JobID": {
-        "description": "Job ID (20 chars)",
-        "in": "path",
-        "name": "job",
-        "required": true,
-        "schema": {
-          "type": "string"
-        }
-      },
-      "PK": {
-        "description": "Public Signing Key - Authentiq ID (43 chars)",
-        "in": "path",
-        "name": "PK",
-        "required": true,
-        "schema": {
-          "type": "string"
-        }
-      }
-    },
-    "requestBodies": {
-      "AuthentiqID": {
-        "content": {
-          "application/jwt": {
-            "schema": {
-              "$ref": "#/components/schemas/AuthentiqID"
-            }
-          }
-        },
-        "description": "Authentiq ID to register",
-        "required": true
-      }
-    },
-    "responses": {
-      "ErrorResponse": {
-        "content": {
-          "*/*": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Error response"
-      }
-    },
-    "schemas": {
-      "AuthentiqID": {
-        "description": "Authentiq ID in JWT format, self-signed.\n",
-        "properties": {
-          "devtoken": {
-            "description": "device token for push messages",
-            "type": "string"
-          },
-          "sub": {
-            "description": "UUID and public signing key",
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub"
-        ]
-      },
-      "Claims": {
-        "description": "Claim in JWT format, self- or issuer-signed. \n",
-        "properties": {
-          "email": {
-            "type": "string"
-          },
-          "phone": {
-            "type": "string"
-          },
-          "scope": {
-            "description": "claim scope",
-            "type": "string"
-          },
-          "sub": {
-            "description": "UUID",
-            "type": "string"
-          },
-          "type": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub",
-          "scope"
-        ]
-      },
-      "Error": {
-        "properties": {
-          "detail": {
-            "type": "string"
-          },
-          "error": {
-            "type": "integer"
-          },
-          "title": {
-            "type": "string"
-          },
-          "type": {
-            "description": "unique uri for this error",
-            "type": "string"
-          }
-        },
-        "required": [
-          "error"
-        ]
-      },
-      "PushToken": {
-        "description": "PushToken in JWT format, self-signed. \n",
-        "properties": {
-          "aud": {
-            "description": "audience (URI)",
-            "type": "string"
-          },
-          "exp": {
-            "type": "integer"
-          },
-          "iat": {
-            "type": "integer"
-          },
-          "iss": {
-            "description": "issuer (URI)",
-            "type": "string"
-          },
-          "nbf": {
-            "type": "integer"
-          },
-          "sub": {
-            "description": "UUID and public signing key",
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub",
-          "iss",
-          "aud"
-        ]
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/build/resources/main/abstractapi.com-geolocation-1.0.0.json b/build/resources/main/abstractapi.com-geolocation-1.0.0.json
deleted file mode 100644
index 48bc4de4321744b85ff9853799c4c27c31bd611a..0000000000000000000000000000000000000000
--- a/build/resources/main/abstractapi.com-geolocation-1.0.0.json
+++ /dev/null
@@ -1,233 +0,0 @@
-{
-  "openapi": "3.0.1",
-  "servers": [
-    {
-      "url": "https://ipgeolocation.abstractapi.com"
-    }
-  ],
-  "info": {
-    "description": "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.",
-    "title": "IP geolocation API",
-    "version": "1.0.0",
-    "x-apisguru-categories": [
-      "location"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://documentation.abstractapi.com/ip-geolocation-openapi.json",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "abstractapi.com",
-    "x-serviceName": "geolocation"
-  },
-  "externalDocs": {
-    "description": "API Documentation",
-    "url": "https://www.abstractapi.com/ip-geolocation-api#docs"
-  },
-  "paths": {
-    "/v1": {
-      "get": {
-        "description": "Retrieve the location of an IP address",
-        "parameters": [
-          {
-            "explode": true,
-            "in": "query",
-            "name": "api_key",
-            "required": true,
-            "schema": {
-              "type": "string"
-            },
-            "style": "form"
-          },
-          {
-            "explode": true,
-            "in": "query",
-            "name": "ip_address",
-            "required": false,
-            "schema": {
-              "example": "195.154.25.40",
-              "type": "string"
-            },
-            "style": "form"
-          },
-          {
-            "explode": true,
-            "in": "query",
-            "name": "fields",
-            "required": false,
-            "schema": {
-              "example": "country,city,timezone",
-              "type": "string"
-            },
-            "style": "form"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "examples": {
-                  "0": {
-                    "value": "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"Île-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<ë<÷\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}"
-                  }
-                },
-                "schema": {
-                  "$ref": "#/components/schemas/inline_response_200"
-                }
-              }
-            },
-            "description": "Location of geolocated IP"
-          }
-        },
-        "servers": [
-          {
-            "url": "https://ipgeolocation.abstractapi.com"
-          }
-        ]
-      },
-      "servers": [
-        {
-          "url": "https://ipgeolocation.abstractapi.com"
-        }
-      ]
-    }
-  },
-  "components": {
-    "schemas": {
-      "inline_response_200": {
-        "properties": {
-          "city": {
-            "type": "string"
-          },
-          "city_geoname_id": {
-            "type": "integer"
-          },
-          "connection": {
-            "properties": {
-              "autonomous_system_number": {
-                "type": "integer"
-              },
-              "autonomous_system_organization": {
-                "type": "string"
-              },
-              "connection_type": {
-                "type": "string"
-              },
-              "isp_name": {
-                "type": "string"
-              },
-              "organization_name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "continent": {
-            "type": "string"
-          },
-          "continent_code": {
-            "type": "string"
-          },
-          "continent_geoname_id": {
-            "type": "integer"
-          },
-          "country": {
-            "type": "string"
-          },
-          "country_code": {
-            "type": "string"
-          },
-          "country_geoname_id": {
-            "type": "integer"
-          },
-          "country_is_eu": {
-            "type": "boolean"
-          },
-          "currency": {
-            "properties": {
-              "currency_code": {
-                "type": "string"
-              },
-              "currency_name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "flag": {
-            "properties": {
-              "emoji": {
-                "type": "string"
-              },
-              "png": {
-                "type": "string"
-              },
-              "svg": {
-                "type": "string"
-              },
-              "unicode": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "ip_address": {
-            "type": "string"
-          },
-          "latitude": {
-            "type": "number"
-          },
-          "longitude": {
-            "type": "number"
-          },
-          "postal_code": {
-            "type": "string"
-          },
-          "region": {
-            "type": "string"
-          },
-          "region_geoname_id": {
-            "type": "integer"
-          },
-          "region_iso_code": {
-            "type": "string"
-          },
-          "security": {
-            "properties": {
-              "is_vpn": {
-                "type": "boolean"
-              }
-            },
-            "type": "object"
-          },
-          "timezone": {
-            "properties": {
-              "abbreviation": {
-                "type": "string"
-              },
-              "current_time": {
-                "type": "string"
-              },
-              "gmt_offset": {
-                "type": "integer"
-              },
-              "is_dst": {
-                "type": "boolean"
-              },
-              "name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        },
-        "type": "object"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/build/resources/main/adyen.com-CheckoutUtilityService-1.json b/build/resources/main/adyen.com-CheckoutUtilityService-1.json
deleted file mode 100644
index f673d45542efe72d5058d08761681bc4899eb2e1..0000000000000000000000000000000000000000
--- a/build/resources/main/adyen.com-CheckoutUtilityService-1.json
+++ /dev/null
@@ -1,117 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "url": "https://checkout-test.adyen.com/v1"
-    }
-  ],
-  "info": {
-    "contact": {
-      "email": "support@adyen.com",
-      "name": "Adyen Support",
-      "url": "https://support.adyen.com/",
-      "x-twitter": "Adyen"
-    },
-    "description": "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```",
-    "termsOfService": "https://docs.adyen.com/legal/terms-conditions",
-    "title": "Adyen Checkout Utility Service",
-    "version": "1",
-    "x-apisguru-categories": [
-      "payment"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg"
-    },
-    "x-origin": [
-      {
-        "converter": {
-          "url": "https://github.com/lucybot/api-spec-converter",
-          "version": "2.7.11"
-        },
-        "format": "openapi",
-        "url": "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "adyen.com",
-    "x-serviceName": "CheckoutUtilityService"
-  },
-  "paths": {
-    "/originKeys": {
-      "post": {
-        "description": "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.",
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/CheckoutUtilityRequest"
-              }
-            }
-          }
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/CheckoutUtilityResponse"
-                }
-              }
-            },
-            "description": "OK - the request has succeeded."
-          },
-          "400": {
-            "description": "Bad Request - a problem reading or understanding the request."
-          },
-          "401": {
-            "description": "Unauthorized - authentication required."
-          },
-          "403": {
-            "description": "Forbidden - insufficient permissions to process the request."
-          },
-          "422": {
-            "description": "Unprocessable Entity - a request validation error."
-          },
-          "500": {
-            "description": "Internal Server Error - the server could not process the request."
-          }
-        },
-        "summary": "Create originKey values for one or more merchant domains.",
-        "x-groupName": "General",
-        "x-sortIndex": 0
-      }
-    }
-  },
-  "components": {
-    "schemas": {
-      "CheckoutUtilityRequest": {
-        "properties": {
-          "originDomains": {
-            "description": "The list of origin domains, for which origin keys are requested.",
-            "items": {
-              "type": "string"
-            },
-            "type": "array"
-          }
-        },
-        "required": [
-          "originDomains"
-        ]
-      },
-      "CheckoutUtilityResponse": {
-        "properties": {
-          "originKeys": {
-            "additionalProperties": {
-              "type": "string"
-            },
-            "description": "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.",
-            "type": "object"
-          }
-        }
-      }
-    }
-  },
-  "x-groups": [
-    "General"
-  ]
-}
\ No newline at end of file
diff --git a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
index 95c28d39c62d627bd2f73c62fc9b4c9b5fb24395..c3a8822f9dac3e8b75a97b790ff1a7768efff35e 100644
--- a/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
+++ b/build/test-results/test/TEST-openapi.OpenAPIMain_test.xml
@@ -1,16 +1,112 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="0" errors="0" timestamp="2021-10-08T23:15:10" hostname="DESKTOP-7SEB5SB" time="0.633">
+<testsuite name="openapi.OpenAPIMain_test" tests="1" skipped="0" failures="1" errors="0" timestamp="2021-10-09T13:17:32" hostname="DESKTOP-7SEB5SB" time="0.401">
   <properties/>
-  <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.633"/>
-  <system-out><![CDATA[5
-Loading expression DSL file '1password.com-events-1.0.0.json'.
-Loading expression DSL file '6-dot-authentiqio.appspot.com-6.json'.
-Loading expression DSL file 'abstractapi.com-geolocation-1.0.0.json'.
-Loading expression DSL file 'adyen.com-CheckoutUtilityService-1.json'.
+  <testcase name="test()" classname="openapi.OpenAPIMain_test" time="0.401">
+    <failure message="java.lang.NullPointerException" type="java.lang.NullPointerException">java.lang.NullPointerException
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.ASTNode.collect_contributors_OpenAPIObject_schemaTuples(ASTNode.java:494)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.survey_OpenAPIObject_schemaTuples(OpenAPIObject.java:1102)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples_compute(OpenAPIObject.java:1232)
+	at de.tudresden.inf.st.openapi.ast.OpenAPIObject.schemaTuples(OpenAPIObject.java:1214)
+	at openapi.OpenAPIMain_test.test(OpenAPIMain_test.java:72)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:688)
+	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
+	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
+	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
+	at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:210)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:206)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:131)
+	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:65)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
+	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
+	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
+	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
+	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
+	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
+	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
+	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
+	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
+	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
+	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
+	at com.sun.proxy.$Proxy2.stop(Unknown Source)
+	at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
+	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
+	at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
+	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
+	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
+	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
+	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
+	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
+	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
+	at java.base/java.lang.Thread.run(Thread.java:829)
+</failure>
+  </testcase>
+  <system-out><![CDATA[1
 Loading expression DSL file 'petstore-v2.yaml'.
 ]]></system-out>
-  <system-err><![CDATA[SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
-SLF4J: Defaulting to no-operation (NOP) logger implementation
-SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
-]]></system-err>
+  <system-err><![CDATA[]]></system-err>
 </testsuite>
diff --git a/build/test-results/test/binary/output.bin b/build/test-results/test/binary/output.bin
index 771876248854dcd16aa4dd7dca804351fe458c0c..b2cafb86a330d768ceb0ed22fa2b81c8e6f3f8be 100644
Binary files a/build/test-results/test/binary/output.bin and b/build/test-results/test/binary/output.bin differ
diff --git a/build/test-results/test/binary/output.bin.idx b/build/test-results/test/binary/output.bin.idx
index 9706eed18037e5fadeb6cba0825aa2d189605b66..42aeebea8d46c35d355eb76aef19d1abdb6becfc 100644
Binary files a/build/test-results/test/binary/output.bin.idx and b/build/test-results/test/binary/output.bin.idx differ
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
index 6530dd67ad20d1d227125da75a2bd76f3a62c9df..d4ad4c7c961d027b3b361fa11d92845108376246 100644
Binary files a/build/test-results/test/binary/results.bin and b/build/test-results/test/binary/results.bin differ
diff --git a/gen-api-ex/1password.com-events-1.0.0-actual.json b/gen-api-ex/1password.com-events-1.0.0-actual.json
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/gen-api-ex/1password.com-events-1.0.0-expected.json b/gen-api-ex/1password.com-events-1.0.0-expected.json
new file mode 100644
index 0000000000000000000000000000000000000000..5621a5d94e3a4e65e1738f49c73812ef1c693a39
--- /dev/null
+++ b/gen-api-ex/1password.com-events-1.0.0-expected.json
@@ -0,0 +1,449 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "description" : "1Password Events API Specification.",
+    "title" : "Events API",
+    "version" : "1.0.0",
+    "x-providerName" : "1password.com",
+    "x-logo" : {
+      "url" : "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png"
+    },
+    "x-apisguru-categories" : [ "security" ],
+    "x-serviceName" : "events",
+    "x-origin" : [ {
+      "format" : "openapi",
+      "url" : "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://events.1password.com",
+    "description" : "1Password"
+  }, {
+    "url" : "https://events.1password.ca",
+    "description" : "1Password CA"
+  }, {
+    "url" : "https://events.1password.eu",
+    "description" : "1Password EU"
+  }, {
+    "url" : "https://events.ent.1password.com",
+    "description" : "1Password Enterprise"
+  } ],
+  "paths" : {
+    "/api/auth/introspect" : {
+      "get" : {
+        "tags" : [ "auth" ],
+        "summary" : "Performs introspection of the provided Bearer JWT token",
+        "operationId" : "getAuthIntrospect",
+        "responses" : {
+          "200" : {
+            "$ref" : "#/components/responses/IntrospectResponse"
+          },
+          "401" : {
+            "$ref" : "#/components/responses/UnauthorizedErrorResponse"
+          },
+          "default" : {
+            "$ref" : "#/components/responses/GenericErrorResponse"
+          }
+        },
+        "security" : [ {
+          "jwtsa" : [ ]
+        } ]
+      }
+    },
+    "/api/v1/itemusages" : {
+      "post" : {
+        "tags" : [ "api-v1" ],
+        "summary" : "Retrieves item usages",
+        "description" : "This endpoint requires your JSON Web Token to have the *itemusages* feature.",
+        "operationId" : "getItemUsages",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/ItemUsagesRequest"
+        },
+        "responses" : {
+          "200" : {
+            "$ref" : "#/components/responses/ItemUsagesResponse"
+          },
+          "401" : {
+            "$ref" : "#/components/responses/UnauthorizedErrorResponse"
+          },
+          "default" : {
+            "$ref" : "#/components/responses/GenericErrorResponse"
+          }
+        },
+        "security" : [ {
+          "jwtsa" : [ ]
+        } ]
+      }
+    },
+    "/api/v1/signinattempts" : {
+      "post" : {
+        "tags" : [ "api-v1" ],
+        "summary" : "Retrieves sign-in attempts",
+        "description" : "This endpoint requires your JSON Web Token to have the *signinattempts* feature.",
+        "operationId" : "getSignInAttempts",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/SignInAttemptsRequest"
+        },
+        "responses" : {
+          "200" : {
+            "$ref" : "#/components/responses/SignInAttemptsResponse"
+          },
+          "401" : {
+            "$ref" : "#/components/responses/UnauthorizedErrorResponse"
+          },
+          "default" : {
+            "$ref" : "#/components/responses/GenericErrorResponse"
+          }
+        },
+        "security" : [ {
+          "jwtsa" : [ ]
+        } ]
+      }
+    }
+  },
+  "components" : {
+    "examples" : {
+      "Cursor" : {
+        "summary" : "Used for continued calling with a cursor",
+        "value" : {
+          "cursor" : "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK"
+        }
+      },
+      "ResetCursor" : {
+        "summary" : "Used for reseting the cursor",
+        "value" : {
+          "limit" : 100,
+          "start_time" : "2021-06-11T16:32:50-03:00"
+        }
+      }
+    },
+    "requestBodies" : {
+      "CursorRequest" : {
+        "content" : {
+          "application/json" : {
+            "examples" : {
+              "Continuing cursor" : {
+                "$ref" : "#/components/examples/Cursor",
+                "abs$ref" : "file:/E:/bachelor-thesis/SigTest/bachelor-thesis-jastadd/build/resources/main/1password.com-events-1.0.0.json#/components/examples/Cursor"
+              },
+              "Resetting cursor" : {
+                "$ref" : "#/components/examples/ResetCursor",
+                "abs$ref" : "file:/E:/bachelor-thesis/SigTest/bachelor-thesis-jastadd/build/resources/main/1password.com-events-1.0.0.json#/components/examples/ResetCursor"
+              }
+            },
+            "schema" : {
+              "oneOf" : [ {
+                "$ref" : "#/components/schemas/Cursor"
+              }, {
+                "$ref" : "#/components/schemas/ResetCursor"
+              } ]
+            }
+          }
+        }
+      },
+      "ItemUsagesRequest" : {
+        "$ref" : "#/components/requestBodies/CursorRequest"
+      },
+      "SignInAttemptsRequest" : {
+        "$ref" : "#/components/requestBodies/CursorRequest"
+      }
+    },
+    "responses" : {
+      "GenericErrorResponse" : {
+        "description" : "Generic error",
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Error"
+            }
+          }
+        }
+      },
+      "IntrospectResponse" : {
+        "description" : "Introspection object",
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Introspection"
+            }
+          }
+        }
+      },
+      "ItemUsagesResponse" : {
+        "description" : "Item usages response object",
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/ItemUsageItems"
+            }
+          }
+        }
+      },
+      "SignInAttemptsResponse" : {
+        "description" : "Sign-in attempts response object",
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/SignInAttemptItems"
+            }
+          }
+        }
+      },
+      "UnauthorizedErrorResponse" : {
+        "description" : "Unauthorized",
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Error"
+            }
+          }
+        }
+      }
+    },
+    "schemas" : {
+      "Client" : {
+        "description" : "Metadata gathered about the client",
+        "properties" : {
+          "app_name" : {
+            "example" : "1Password Extension",
+            "type" : "string"
+          },
+          "app_version" : {
+            "example" : "20127",
+            "type" : "string"
+          },
+          "ip_address" : {
+            "example" : "13.227.95.22",
+            "type" : "string"
+          },
+          "os_name" : {
+            "example" : "MacOSX",
+            "type" : "string"
+          },
+          "os_version" : {
+            "example" : "10.15.6",
+            "type" : "string"
+          },
+          "platform_name" : {
+            "example" : "Chrome",
+            "type" : "string"
+          },
+          "platform_version" : {
+            "description" : "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed",
+            "type" : "string"
+          }
+        }
+      },
+      "Cursor" : {
+        "description" : "Cursor",
+        "properties" : {
+          "cursor" : {
+            "description" : "Cursor to fetch more data if available or continue the polling process if required",
+            "example" : "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK",
+            "type" : "string"
+          }
+        }
+      },
+      "CursorCollection" : {
+        "description" : "Common cursor properties for collection responses",
+        "allOf" : [ {
+          "$ref" : "#/components/schemas/Cursor"
+        }, {
+          "properties" : {
+            "has_more" : {
+              "description" : "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.",
+              "type" : "boolean"
+            }
+          }
+        } ]
+      },
+      "DateTimeRFC3339" : {
+        "example" : "2020-06-11T16:32:50-03:00",
+        "format" : "date-time",
+        "type" : "string"
+      },
+      "Details" : {
+        "description" : "Additional information about the sign-in attempt",
+        "properties" : {
+          "value" : {
+            "description" : "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt",
+            "example" : "Europe",
+            "type" : "string"
+          }
+        }
+      },
+      "Error" : {
+        "properties" : {
+          "Error" : {
+            "properties" : {
+              "Message" : {
+                "description" : "The error message.",
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          }
+        },
+        "type" : "object"
+      },
+      "Introspection" : {
+        "properties" : {
+          "Features" : {
+            "example" : [ "itemusages", "signinattempts" ],
+            "type" : "array",
+            "items" : {
+              "type" : "string"
+            }
+          },
+          "IssuedAt" : {
+            "$ref" : "#/components/schemas/DateTimeRFC3339"
+          },
+          "UUID" : {
+            "type" : "string"
+          }
+        },
+        "type" : "object"
+      },
+      "ItemUsage" : {
+        "description" : "A single item usage object",
+        "properties" : {
+          "client" : {
+            "$ref" : "#/components/schemas/Client"
+          },
+          "item_uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          },
+          "timestamp" : {
+            "$ref" : "#/components/schemas/DateTimeRFC3339"
+          },
+          "used_version" : {
+            "type" : "integer"
+          },
+          "user" : {
+            "$ref" : "#/components/schemas/User"
+          },
+          "uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          },
+          "vault_uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          }
+        }
+      },
+      "ItemUsageItems" : {
+        "description" : "An object wrapping cursor properties and a list of items usages",
+        "allOf" : [ {
+          "properties" : {
+            "items" : {
+              "type" : "array",
+              "items" : {
+                "$ref" : "#/components/schemas/ItemUsage"
+              }
+            }
+          }
+        }, {
+          "$ref" : "#/components/schemas/CursorCollection"
+        } ]
+      },
+      "ResetCursor" : {
+        "description" : "Reset cursor",
+        "properties" : {
+          "end_time" : {
+            "$ref" : "#/components/schemas/DateTimeRFC3339"
+          },
+          "limit" : {
+            "maximum" : 1000,
+            "minimum" : 1,
+            "type" : "number"
+          },
+          "start_time" : {
+            "$ref" : "#/components/schemas/DateTimeRFC3339"
+          }
+        }
+      },
+      "SignInAttempt" : {
+        "description" : "A single sign-in attempt object",
+        "properties" : {
+          "category" : {
+            "example" : "firewall_failed",
+            "type" : "string",
+            "enum" : [ "success", "credentials_failed", "mfa_failed", "modern_version_failed", "firewall_failed", "firewall_reported_success" ]
+          },
+          "client" : {
+            "$ref" : "#/components/schemas/Client"
+          },
+          "country" : {
+            "description" : "Country ISO Code",
+            "example" : "France",
+            "type" : "string"
+          },
+          "details" : {
+            "$ref" : "#/components/schemas/Details"
+          },
+          "session_uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          },
+          "target_user" : {
+            "$ref" : "#/components/schemas/User"
+          },
+          "timestamp" : {
+            "$ref" : "#/components/schemas/DateTimeRFC3339"
+          },
+          "type" : {
+            "example" : "continent_blocked",
+            "type" : "string",
+            "enum" : [ "credentials_ok", "mfa_ok", "password_secret_bad", "mfa_missing", "totp_disabled", "totp_bad", "totp_timeout", "u2f_disabled", "u2f_bad", "u2f_timout", "duo_disabled", "duo_bad", "duo_timeout", "duo_native_bad", "platform_secret_disabled", "platform_secret_bad", "platform_secret_proxy", "code_disabled", "code_bad", "code_timeout", "ip_blocked", "continent_blocked", "country_blocked", "anonymous_blocked", "all_blocked", "modern_version_missing", "modern_version_old" ]
+          },
+          "uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          }
+        }
+      },
+      "SignInAttemptItems" : {
+        "description" : "An object wrapping cursor properties and a list of sign-in attempts",
+        "allOf" : [ {
+          "properties" : {
+            "items" : {
+              "type" : "array",
+              "items" : {
+                "$ref" : "#/components/schemas/SignInAttempt"
+              }
+            }
+          }
+        }, {
+          "$ref" : "#/components/schemas/CursorCollection"
+        } ]
+      },
+      "UUID" : {
+        "example" : "56YE2TYN2VFYRLNSHKPW5NVT5E",
+        "type" : "string"
+      },
+      "User" : {
+        "description" : "User object",
+        "properties" : {
+          "email" : {
+            "format" : "email",
+            "type" : "string"
+          },
+          "name" : {
+            "description" : "Full name",
+            "example" : "Jack O'Neill",
+            "type" : "string"
+          },
+          "uuid" : {
+            "$ref" : "#/components/schemas/UUID"
+          }
+        }
+      }
+    },
+    "securitySchemes" : {
+      "jwtsa" : {
+        "type" : "http",
+        "description" : "A JWT SA token issued to this service",
+        "scheme" : "bearer",
+        "bearerFormat" : "JWT-SA"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json b/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json
new file mode 100644
index 0000000000000000000000000000000000000000..f9464ad08d58fa66810f4c13f3d991e26a69fa43
--- /dev/null
+++ b/gen-api-ex/6-dot-authentiqio.appspot.com-6-actual.json
@@ -0,0 +1,910 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "contact" : {
+      "email" : "hello@authentiq.com",
+      "name" : "Authentiq team",
+      "url" : "http://authentiq.io/support"
+    },
+    "description" : "Strong authentication, without the passwords.",
+    "license" : {
+      "name" : "Apache 2.0",
+      "url" : "http://www.apache.org/licenses/LICENSE-2.0.html"
+    },
+    "termsOfService" : "http://authentiq.com/terms/",
+    "title" : "Authentiq API",
+    "version" : "6",
+    "x-providerName" : "6-dot-authentiqio.appspot.com",
+    "x-logo" : {
+      "backgroundColor" : "#F26641",
+      "url" : "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg"
+    },
+    "x-apisguru-categories" : [ "security" ],
+    "x-origin" : [ {
+      "format" : "openapi",
+      "url" : "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://6-dot-authentiqio.appspot.com"
+  } ],
+  "paths" : {
+    "/scope/{job}" : {
+      "head" : {
+        "tags" : [ "scope", "head" ],
+        "description" : "HEAD to get the status of a verification job",
+        "operationId" : "sign_retrieve_head",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Confirmed and signed"
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "204" : {
+            "description" : "Confirmed, waiting for signing"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "get" : {
+        "tags" : [ "scope", "get" ],
+        "description" : "get the status / current content of a verification job",
+        "operationId" : "sign_retrieve",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successful response (JWT)",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    },
+                    "field" : {
+                      "type" : "string"
+                    },
+                    "exp" : {
+                      "type" : "integer"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              },
+              "application/jwt" : {
+                "schema" : {
+                  "properties" : {
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    },
+                    "field" : {
+                      "type" : "string"
+                    },
+                    "exp" : {
+                      "type" : "integer"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "204" : {
+            "description" : "Confirmed, waiting for signing"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              },
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "scope", "put" ],
+        "description" : "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "sign_update",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "properties" : {
+                    "jwt" : {
+                      "description" : "result is JWT or JSON??",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "ready",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Job not confirmed yet `confirm-first`",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "scope", "post" ],
+        "description" : "this is a scope confirmation",
+        "operationId" : "sign_confirm",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "202" : {
+            "description" : "Successfully confirmed",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "401" : {
+            "description" : "Confirmation error `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "405" : {
+            "description" : "JWT POSTed to scope `not-supported`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "scope", "delete" ],
+        "description" : "delete a verification job",
+        "operationId" : "sign_delete",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully deleted",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/scope" : {
+      "post" : {
+        "tags" : [ "scope", "post" ],
+        "description" : "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "sign_request",
+        "parameters" : [ {
+          "description" : "test only mode, using test issuer",
+          "required" : false,
+          "schema" : {
+            "type" : "integer"
+          },
+          "in" : "query",
+          "name" : "test"
+        } ],
+        "requestBody" : {
+          "description" : "Claims of scope",
+          "required" : true,
+          "content" : {
+            "application/jwt" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/Claims"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "201" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "job" : {
+                      "description" : "20-character ID",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "waiting",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "429" : {
+            "description" : "Too Many Requests on same address / number `rate-limit`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/login" : {
+      "post" : {
+        "tags" : [ "login", "post" ],
+        "description" : "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "push_login_request",
+        "parameters" : [ {
+          "description" : "URI App will connect to",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "callback"
+        } ],
+        "requestBody" : {
+          "description" : "Push Token.",
+          "required" : true,
+          "content" : {
+            "application/jwt" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/PushToken"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "sent",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "401" : {
+            "description" : "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/key" : {
+      "post" : {
+        "tags" : [ "key", "post" ],
+        "description" : "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_register",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "201" : {
+            "description" : "Successfully registered",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "secret" : {
+                      "description" : "revoke key",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "registered",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Key already registered `duplicate-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "key", "delete" ],
+        "description" : "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n",
+        "operationId" : "key_revoke_nosecret",
+        "parameters" : [ {
+          "description" : "primary email associated to Key (ID)",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "email"
+        }, {
+          "description" : "primary phone number, international representation",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "phone"
+        }, {
+          "description" : "verification code sent by email",
+          "required" : false,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "code"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully deleted",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "pending or done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "401" : {
+            "description" : "Authentication error `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Confirm with code sent `confirm-first`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "/key/{PK}" : {
+      "head" : {
+        "tags" : [ "key", "head" ],
+        "description" : "HEAD info on Authentiq ID\n",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Key exists"
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "410" : {
+            "description" : "Key is revoked `revoked-key`",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "get" : {
+        "tags" : [ "key", "get" ],
+        "description" : "Get public details of an Authentiq ID.\n",
+        "operationId" : "key_retrieve",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully retrieved",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    },
+                    "since" : {
+                      "format" : "date-time",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "410" : {
+            "description" : "Key is revoked (gone). `revoked-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "key", "put" ],
+        "description" : "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_bind",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Already bound to another key `duplicate-hash`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "key", "post" ],
+        "description" : "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_update",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "key", "delete" ],
+        "description" : "Revoke an Identity (Key) with a revocation secret",
+        "operationId" : "key_revoke",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        }, {
+          "description" : "revokation secret",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "secret"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          },
+          "401" : {
+            "description" : "Key not found / wrong code `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "components" : {
+    "parameters" : {
+      "PK" : {
+        "description" : "Public Signing Key - Authentiq ID (43 chars)",
+        "required" : true,
+        "schema" : {
+          "type" : "string"
+        },
+        "in" : "path",
+        "name" : "PK"
+      },
+      "JobID" : {
+        "description" : "Job ID (20 chars)",
+        "required" : true,
+        "schema" : {
+          "type" : "string"
+        },
+        "in" : "path",
+        "name" : "job"
+      }
+    },
+    "requestBodies" : {
+      "AuthentiqID" : {
+        "description" : "Authentiq ID to register",
+        "required" : true,
+        "content" : {
+          "application/jwt" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/AuthentiqID"
+            }
+          }
+        }
+      }
+    },
+    "responses" : {
+      "ErrorResponse" : {
+        "description" : "Error response",
+        "content" : {
+          "*/*" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Error"
+            }
+          }
+        }
+      }
+    },
+    "schemas" : {
+      "Claims" : {
+        "description" : "Claim in JWT format, self- or issuer-signed. \n",
+        "properties" : {
+          "sub" : {
+            "description" : "UUID",
+            "type" : "string"
+          },
+          "phone" : {
+            "type" : "string"
+          },
+          "scope" : {
+            "description" : "claim scope",
+            "type" : "string"
+          },
+          "type" : {
+            "type" : "string"
+          },
+          "email" : {
+            "type" : "string"
+          }
+        },
+        "required" : [ "sub", "scope" ]
+      },
+      "Error" : {
+        "properties" : {
+          "detail" : {
+            "type" : "string"
+          },
+          "error" : {
+            "type" : "integer"
+          },
+          "title" : {
+            "type" : "string"
+          },
+          "type" : {
+            "description" : "unique uri for this error",
+            "type" : "string"
+          }
+        },
+        "required" : [ "error" ]
+      },
+      "AuthentiqID" : {
+        "description" : "Authentiq ID in JWT format, self-signed.\n",
+        "properties" : {
+          "sub" : {
+            "description" : "UUID and public signing key",
+            "type" : "string"
+          },
+          "devtoken" : {
+            "description" : "device token for push messages",
+            "type" : "string"
+          }
+        },
+        "required" : [ "sub" ]
+      },
+      "PushToken" : {
+        "description" : "PushToken in JWT format, self-signed. \n",
+        "properties" : {
+          "aud" : {
+            "description" : "audience (URI)",
+            "type" : "string"
+          },
+          "sub" : {
+            "description" : "UUID and public signing key",
+            "type" : "string"
+          },
+          "nbf" : {
+            "type" : "integer"
+          },
+          "iss" : {
+            "description" : "issuer (URI)",
+            "type" : "string"
+          },
+          "exp" : {
+            "type" : "integer"
+          },
+          "iat" : {
+            "type" : "integer"
+          }
+        },
+        "required" : [ "sub", "iss", "aud" ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json b/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json
new file mode 100644
index 0000000000000000000000000000000000000000..8530316275e9e16d02d248cdf2dc820485ce0551
--- /dev/null
+++ b/gen-api-ex/6-dot-authentiqio.appspot.com-6-expected.json
@@ -0,0 +1,910 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "contact" : {
+      "email" : "hello@authentiq.com",
+      "name" : "Authentiq team",
+      "url" : "http://authentiq.io/support"
+    },
+    "description" : "Strong authentication, without the passwords.",
+    "license" : {
+      "name" : "Apache 2.0",
+      "url" : "http://www.apache.org/licenses/LICENSE-2.0.html"
+    },
+    "termsOfService" : "http://authentiq.com/terms/",
+    "title" : "Authentiq API",
+    "version" : "6",
+    "x-providerName" : "6-dot-authentiqio.appspot.com",
+    "x-logo" : {
+      "backgroundColor" : "#F26641",
+      "url" : "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg"
+    },
+    "x-apisguru-categories" : [ "security" ],
+    "x-origin" : [ {
+      "format" : "openapi",
+      "url" : "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://6-dot-authentiqio.appspot.com"
+  } ],
+  "paths" : {
+    "/key" : {
+      "post" : {
+        "tags" : [ "key", "post" ],
+        "description" : "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_register",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "201" : {
+            "description" : "Successfully registered",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "secret" : {
+                      "description" : "revoke key",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "registered",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Key already registered `duplicate-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "key", "delete" ],
+        "description" : "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n",
+        "operationId" : "key_revoke_nosecret",
+        "parameters" : [ {
+          "description" : "primary email associated to Key (ID)",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "email"
+        }, {
+          "description" : "primary phone number, international representation",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "phone"
+        }, {
+          "description" : "verification code sent by email",
+          "required" : false,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "code"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully deleted",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "pending or done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "401" : {
+            "description" : "Authentication error `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Confirm with code sent `confirm-first`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      }
+    },
+    "/key/{PK}" : {
+      "head" : {
+        "tags" : [ "key", "head" ],
+        "description" : "HEAD info on Authentiq ID\n",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Key exists"
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "410" : {
+            "description" : "Key is revoked `revoked-key`",
+            "content" : {
+              "*/*" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "get" : {
+        "tags" : [ "key", "get" ],
+        "description" : "Get public details of an Authentiq ID.\n",
+        "operationId" : "key_retrieve",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully retrieved",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "since" : {
+                      "format" : "date-time",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "type" : "string"
+                    },
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "410" : {
+            "description" : "Key is revoked (gone). `revoked-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "key", "put" ],
+        "description" : "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_bind",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Already bound to another key `duplicate-hash`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "key", "post" ],
+        "description" : "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "key_update",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        } ],
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/AuthentiqID"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "key", "delete" ],
+        "description" : "Revoke an Identity (Key) with a revocation secret",
+        "operationId" : "key_revoke",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/PK"
+        }, {
+          "description" : "revokation secret",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "secret"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "401" : {
+            "description" : "Key not found / wrong code `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Unknown key `unknown-key`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      }
+    },
+    "/login" : {
+      "post" : {
+        "tags" : [ "login", "post" ],
+        "description" : "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "push_login_request",
+        "parameters" : [ {
+          "description" : "URI App will connect to",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "callback"
+        } ],
+        "requestBody" : {
+          "description" : "Push Token.",
+          "required" : true,
+          "content" : {
+            "application/jwt" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/PushToken"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "sent",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "401" : {
+            "description" : "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      }
+    },
+    "/scope" : {
+      "post" : {
+        "tags" : [ "scope", "post" ],
+        "description" : "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "sign_request",
+        "parameters" : [ {
+          "description" : "test only mode, using test issuer",
+          "required" : false,
+          "schema" : {
+            "type" : "integer"
+          },
+          "in" : "query",
+          "name" : "test"
+        } ],
+        "requestBody" : {
+          "description" : "Claims of scope",
+          "required" : true,
+          "content" : {
+            "application/jwt" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/Claims"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "201" : {
+            "description" : "Successful response",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "job" : {
+                      "description" : "20-character ID",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "waiting",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "429" : {
+            "description" : "Too Many Requests on same address / number `rate-limit`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      }
+    },
+    "/scope/{job}" : {
+      "head" : {
+        "tags" : [ "scope", "head" ],
+        "description" : "HEAD to get the status of a verification job",
+        "operationId" : "sign_retrieve_head",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Confirmed and signed"
+          },
+          "204" : {
+            "description" : "Confirmed, waiting for signing"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "get" : {
+        "tags" : [ "scope", "get" ],
+        "description" : "get the status / current content of a verification job",
+        "operationId" : "sign_retrieve",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successful response (JWT)",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "exp" : {
+                      "type" : "integer"
+                    },
+                    "field" : {
+                      "type" : "string"
+                    },
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              },
+              "application/jwt" : {
+                "schema" : {
+                  "properties" : {
+                    "exp" : {
+                      "type" : "integer"
+                    },
+                    "field" : {
+                      "type" : "string"
+                    },
+                    "sub" : {
+                      "description" : "base64safe encoded public signing key",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object",
+                  "title" : "JWT"
+                }
+              }
+            }
+          },
+          "204" : {
+            "description" : "Confirmed, waiting for signing"
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              },
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "scope", "put" ],
+        "description" : "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
+        "operationId" : "sign_update",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully updated",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "properties" : {
+                    "jwt" : {
+                      "description" : "result is JWT or JSON??",
+                      "type" : "string"
+                    },
+                    "status" : {
+                      "description" : "ready",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "409" : {
+            "description" : "Job not confirmed yet `confirm-first`",
+            "content" : {
+              "application/jwt" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "post" : {
+        "tags" : [ "scope", "post" ],
+        "description" : "this is a scope confirmation",
+        "operationId" : "sign_confirm",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "202" : {
+            "description" : "Successfully confirmed",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "confirmed",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "401" : {
+            "description" : "Confirmation error `auth-error`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "405" : {
+            "description" : "JWT POSTed to scope `not-supported`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "scope", "delete" ],
+        "description" : "delete a verification job",
+        "operationId" : "sign_delete",
+        "parameters" : [ {
+          "$ref" : "#/components/parameters/JobID"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Successfully deleted",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "properties" : {
+                    "status" : {
+                      "description" : "done",
+                      "type" : "string"
+                    }
+                  },
+                  "type" : "object"
+                }
+              }
+            }
+          },
+          "404" : {
+            "description" : "Job not found `unknown-job`",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Error"
+                }
+              }
+            }
+          },
+          "default" : {
+            "$ref" : "#/components/responses/ErrorResponse"
+          }
+        }
+      }
+    }
+  },
+  "components" : {
+    "parameters" : {
+      "JobID" : {
+        "description" : "Job ID (20 chars)",
+        "required" : true,
+        "schema" : {
+          "type" : "string"
+        },
+        "in" : "path",
+        "name" : "job"
+      },
+      "PK" : {
+        "description" : "Public Signing Key - Authentiq ID (43 chars)",
+        "required" : true,
+        "schema" : {
+          "type" : "string"
+        },
+        "in" : "path",
+        "name" : "PK"
+      }
+    },
+    "requestBodies" : {
+      "AuthentiqID" : {
+        "description" : "Authentiq ID to register",
+        "required" : true,
+        "content" : {
+          "application/jwt" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/AuthentiqID"
+            }
+          }
+        }
+      }
+    },
+    "responses" : {
+      "ErrorResponse" : {
+        "description" : "Error response",
+        "content" : {
+          "*/*" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Error"
+            }
+          }
+        }
+      }
+    },
+    "schemas" : {
+      "AuthentiqID" : {
+        "description" : "Authentiq ID in JWT format, self-signed.\n",
+        "properties" : {
+          "devtoken" : {
+            "description" : "device token for push messages",
+            "type" : "string"
+          },
+          "sub" : {
+            "description" : "UUID and public signing key",
+            "type" : "string"
+          }
+        },
+        "required" : [ "sub" ]
+      },
+      "Claims" : {
+        "description" : "Claim in JWT format, self- or issuer-signed. \n",
+        "properties" : {
+          "email" : {
+            "type" : "string"
+          },
+          "phone" : {
+            "type" : "string"
+          },
+          "scope" : {
+            "description" : "claim scope",
+            "type" : "string"
+          },
+          "sub" : {
+            "description" : "UUID",
+            "type" : "string"
+          },
+          "type" : {
+            "type" : "string"
+          }
+        },
+        "required" : [ "sub", "scope" ]
+      },
+      "Error" : {
+        "properties" : {
+          "detail" : {
+            "type" : "string"
+          },
+          "error" : {
+            "type" : "integer"
+          },
+          "title" : {
+            "type" : "string"
+          },
+          "type" : {
+            "description" : "unique uri for this error",
+            "type" : "string"
+          }
+        },
+        "required" : [ "error" ]
+      },
+      "PushToken" : {
+        "description" : "PushToken in JWT format, self-signed. \n",
+        "properties" : {
+          "aud" : {
+            "description" : "audience (URI)",
+            "type" : "string"
+          },
+          "exp" : {
+            "type" : "integer"
+          },
+          "iat" : {
+            "type" : "integer"
+          },
+          "iss" : {
+            "description" : "issuer (URI)",
+            "type" : "string"
+          },
+          "nbf" : {
+            "type" : "integer"
+          },
+          "sub" : {
+            "description" : "UUID and public signing key",
+            "type" : "string"
+          }
+        },
+        "required" : [ "sub", "iss", "aud" ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json b/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json
new file mode 100644
index 0000000000000000000000000000000000000000..59e7e5317cba6e837b0ff9eefe63ba7156c1ed7a
--- /dev/null
+++ b/gen-api-ex/abstractapi.com-geolocation-1.0.0-actual.json
@@ -0,0 +1,219 @@
+{
+  "openapi" : "3.0.1",
+  "info" : {
+    "description" : "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.",
+    "title" : "IP geolocation API",
+    "version" : "1.0.0",
+    "x-providerName" : "abstractapi.com",
+    "x-logo" : {
+      "url" : "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png"
+    },
+    "x-apisguru-categories" : [ "location" ],
+    "x-serviceName" : "geolocation",
+    "x-origin" : [ {
+      "format" : "openapi",
+      "url" : "https://documentation.abstractapi.com/ip-geolocation-openapi.json",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://ipgeolocation.abstractapi.com"
+  } ],
+  "paths" : {
+    "/v1" : {
+      "servers" : [ {
+        "url" : "https://ipgeolocation.abstractapi.com"
+      } ],
+      "get" : {
+        "description" : "Retrieve the location of an IP address",
+        "parameters" : [ {
+          "explode" : true,
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "api_key"
+        }, {
+          "explode" : true,
+          "required" : false,
+          "schema" : {
+            "example" : "195.154.25.40",
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "ip_address"
+        }, {
+          "explode" : true,
+          "required" : false,
+          "schema" : {
+            "example" : "country,city,timezone",
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "fields"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Location of geolocated IP",
+            "content" : {
+              "application/json" : {
+                "examples" : {
+                  "0" : {
+                    "value" : "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"?le-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<?<��\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}"
+                  }
+                },
+                "schema" : {
+                  "$ref" : "#/components/schemas/inline_response_200"
+                }
+              }
+            }
+          }
+        },
+        "servers" : [ {
+          "url" : "https://ipgeolocation.abstractapi.com"
+        } ]
+      }
+    }
+  },
+  "components" : {
+    "schemas" : {
+      "inline_response_200" : {
+        "properties" : {
+          "continent" : {
+            "type" : "string"
+          },
+          "country" : {
+            "type" : "string"
+          },
+          "flag" : {
+            "properties" : {
+              "emoji" : {
+                "type" : "string"
+              },
+              "svg" : {
+                "type" : "string"
+              },
+              "png" : {
+                "type" : "string"
+              },
+              "unicode" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          },
+          "country_geoname_id" : {
+            "type" : "integer"
+          },
+          "city" : {
+            "type" : "string"
+          },
+          "city_geoname_id" : {
+            "type" : "integer"
+          },
+          "country_is_eu" : {
+            "type" : "boolean"
+          },
+          "timezone" : {
+            "properties" : {
+              "name" : {
+                "type" : "string"
+              },
+              "gmt_offset" : {
+                "type" : "integer"
+              },
+              "abbreviation" : {
+                "type" : "string"
+              },
+              "current_time" : {
+                "type" : "string"
+              },
+              "is_dst" : {
+                "type" : "boolean"
+              }
+            },
+            "type" : "object"
+          },
+          "latitude" : {
+            "type" : "number"
+          },
+          "continent_code" : {
+            "type" : "string"
+          },
+          "ip_address" : {
+            "type" : "string"
+          },
+          "region_geoname_id" : {
+            "type" : "integer"
+          },
+          "region_iso_code" : {
+            "type" : "string"
+          },
+          "country_code" : {
+            "type" : "string"
+          },
+          "security" : {
+            "properties" : {
+              "is_vpn" : {
+                "type" : "boolean"
+              }
+            },
+            "type" : "object"
+          },
+          "connection" : {
+            "properties" : {
+              "isp_name" : {
+                "type" : "string"
+              },
+              "connection_type" : {
+                "type" : "string"
+              },
+              "organization_name" : {
+                "type" : "string"
+              },
+              "autonomous_system_organization" : {
+                "type" : "string"
+              },
+              "autonomous_system_number" : {
+                "type" : "integer"
+              }
+            },
+            "type" : "object"
+          },
+          "currency" : {
+            "properties" : {
+              "currency_name" : {
+                "type" : "string"
+              },
+              "currency_code" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          },
+          "continent_geoname_id" : {
+            "type" : "integer"
+          },
+          "postal_code" : {
+            "type" : "string"
+          },
+          "region" : {
+            "type" : "string"
+          },
+          "longitude" : {
+            "type" : "number"
+          }
+        },
+        "type" : "object"
+      }
+    }
+  },
+  "externalDocs" : {
+    "description" : "API Documentation",
+    "url" : "https://www.abstractapi.com/ip-geolocation-api#docs"
+  }
+}
\ No newline at end of file
diff --git a/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json b/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json
new file mode 100644
index 0000000000000000000000000000000000000000..78f32585f434c1cb5ecd0c65dc7e8516e0349efb
--- /dev/null
+++ b/gen-api-ex/abstractapi.com-geolocation-1.0.0-expected.json
@@ -0,0 +1,219 @@
+{
+  "openapi" : "3.0.1",
+  "info" : {
+    "description" : "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.",
+    "title" : "IP geolocation API",
+    "version" : "1.0.0",
+    "x-providerName" : "abstractapi.com",
+    "x-logo" : {
+      "url" : "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png"
+    },
+    "x-apisguru-categories" : [ "location" ],
+    "x-serviceName" : "geolocation",
+    "x-origin" : [ {
+      "format" : "openapi",
+      "url" : "https://documentation.abstractapi.com/ip-geolocation-openapi.json",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://ipgeolocation.abstractapi.com"
+  } ],
+  "paths" : {
+    "/v1" : {
+      "servers" : [ {
+        "url" : "https://ipgeolocation.abstractapi.com"
+      } ],
+      "get" : {
+        "description" : "Retrieve the location of an IP address",
+        "parameters" : [ {
+          "explode" : true,
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "api_key"
+        }, {
+          "explode" : true,
+          "required" : false,
+          "schema" : {
+            "example" : "195.154.25.40",
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "ip_address"
+        }, {
+          "explode" : true,
+          "required" : false,
+          "schema" : {
+            "example" : "country,city,timezone",
+            "type" : "string"
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "fields"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "Location of geolocated IP",
+            "content" : {
+              "application/json" : {
+                "examples" : {
+                  "0" : {
+                    "value" : "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"?le-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<?<��\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}"
+                  }
+                },
+                "schema" : {
+                  "$ref" : "#/components/schemas/inline_response_200"
+                }
+              }
+            }
+          }
+        },
+        "servers" : [ {
+          "url" : "https://ipgeolocation.abstractapi.com"
+        } ]
+      }
+    }
+  },
+  "components" : {
+    "schemas" : {
+      "inline_response_200" : {
+        "properties" : {
+          "city" : {
+            "type" : "string"
+          },
+          "city_geoname_id" : {
+            "type" : "integer"
+          },
+          "connection" : {
+            "properties" : {
+              "autonomous_system_number" : {
+                "type" : "integer"
+              },
+              "autonomous_system_organization" : {
+                "type" : "string"
+              },
+              "connection_type" : {
+                "type" : "string"
+              },
+              "isp_name" : {
+                "type" : "string"
+              },
+              "organization_name" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          },
+          "continent" : {
+            "type" : "string"
+          },
+          "continent_code" : {
+            "type" : "string"
+          },
+          "continent_geoname_id" : {
+            "type" : "integer"
+          },
+          "country" : {
+            "type" : "string"
+          },
+          "country_code" : {
+            "type" : "string"
+          },
+          "country_geoname_id" : {
+            "type" : "integer"
+          },
+          "country_is_eu" : {
+            "type" : "boolean"
+          },
+          "currency" : {
+            "properties" : {
+              "currency_code" : {
+                "type" : "string"
+              },
+              "currency_name" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          },
+          "flag" : {
+            "properties" : {
+              "emoji" : {
+                "type" : "string"
+              },
+              "png" : {
+                "type" : "string"
+              },
+              "svg" : {
+                "type" : "string"
+              },
+              "unicode" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          },
+          "ip_address" : {
+            "type" : "string"
+          },
+          "latitude" : {
+            "type" : "number"
+          },
+          "longitude" : {
+            "type" : "number"
+          },
+          "postal_code" : {
+            "type" : "string"
+          },
+          "region" : {
+            "type" : "string"
+          },
+          "region_geoname_id" : {
+            "type" : "integer"
+          },
+          "region_iso_code" : {
+            "type" : "string"
+          },
+          "security" : {
+            "properties" : {
+              "is_vpn" : {
+                "type" : "boolean"
+              }
+            },
+            "type" : "object"
+          },
+          "timezone" : {
+            "properties" : {
+              "abbreviation" : {
+                "type" : "string"
+              },
+              "current_time" : {
+                "type" : "string"
+              },
+              "gmt_offset" : {
+                "type" : "integer"
+              },
+              "is_dst" : {
+                "type" : "boolean"
+              },
+              "name" : {
+                "type" : "string"
+              }
+            },
+            "type" : "object"
+          }
+        },
+        "type" : "object"
+      }
+    }
+  },
+  "externalDocs" : {
+    "description" : "API Documentation",
+    "url" : "https://www.abstractapi.com/ip-geolocation-api#docs"
+  }
+}
\ No newline at end of file
diff --git a/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json b/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json
new file mode 100644
index 0000000000000000000000000000000000000000..47f0f2520860a920c3413661ffc5712e8dfab09d
--- /dev/null
+++ b/gen-api-ex/adyen.com-CheckoutUtilityService-1-actual.json
@@ -0,0 +1,107 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "contact" : {
+      "email" : "support@adyen.com",
+      "name" : "Adyen Support",
+      "url" : "https://support.adyen.com/",
+      "x-twitter" : "Adyen"
+    },
+    "description" : "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```",
+    "termsOfService" : "https://docs.adyen.com/legal/terms-conditions",
+    "title" : "Adyen Checkout Utility Service",
+    "version" : "1",
+    "x-providerName" : "adyen.com",
+    "x-logo" : {
+      "url" : "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg"
+    },
+    "x-apisguru-categories" : [ "payment" ],
+    "x-serviceName" : "CheckoutUtilityService",
+    "x-origin" : [ {
+      "converter" : {
+        "url" : "https://github.com/lucybot/api-spec-converter",
+        "version" : "2.7.11"
+      },
+      "format" : "openapi",
+      "url" : "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://checkout-test.adyen.com/v1"
+  } ],
+  "paths" : {
+    "/originKeys" : {
+      "post" : {
+        "summary" : "Create originKey values for one or more merchant domains.",
+        "description" : "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/CheckoutUtilityRequest"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "OK - the request has succeeded.",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/CheckoutUtilityResponse"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Bad Request - a problem reading or understanding the request."
+          },
+          "422" : {
+            "description" : "Unprocessable Entity - a request validation error."
+          },
+          "401" : {
+            "description" : "Unauthorized - authentication required."
+          },
+          "500" : {
+            "description" : "Internal Server Error - the server could not process the request."
+          },
+          "403" : {
+            "description" : "Forbidden - insufficient permissions to process the request."
+          }
+        },
+        "x-groupName" : "General",
+        "x-sortIndex" : 0
+      }
+    }
+  },
+  "components" : {
+    "schemas" : {
+      "CheckoutUtilityRequest" : {
+        "properties" : {
+          "originDomains" : {
+            "description" : "The list of origin domains, for which origin keys are requested.",
+            "type" : "array",
+            "items" : {
+              "type" : "string"
+            }
+          }
+        },
+        "required" : [ "originDomains" ]
+      },
+      "CheckoutUtilityResponse" : {
+        "properties" : {
+          "originKeys" : {
+            "description" : "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.",
+            "type" : "object",
+            "additionalProperties" : {
+              "type" : "string"
+            }
+          }
+        }
+      }
+    }
+  },
+  "x-groups" : [ "General" ]
+}
\ No newline at end of file
diff --git a/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json b/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json
new file mode 100644
index 0000000000000000000000000000000000000000..cd12a31088cded16ed8a2b53d9005e30b396683c
--- /dev/null
+++ b/gen-api-ex/adyen.com-CheckoutUtilityService-1-expected.json
@@ -0,0 +1,107 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "contact" : {
+      "email" : "support@adyen.com",
+      "name" : "Adyen Support",
+      "url" : "https://support.adyen.com/",
+      "x-twitter" : "Adyen"
+    },
+    "description" : "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```",
+    "termsOfService" : "https://docs.adyen.com/legal/terms-conditions",
+    "title" : "Adyen Checkout Utility Service",
+    "version" : "1",
+    "x-providerName" : "adyen.com",
+    "x-logo" : {
+      "url" : "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg"
+    },
+    "x-apisguru-categories" : [ "payment" ],
+    "x-serviceName" : "CheckoutUtilityService",
+    "x-origin" : [ {
+      "converter" : {
+        "url" : "https://github.com/lucybot/api-spec-converter",
+        "version" : "2.7.11"
+      },
+      "format" : "openapi",
+      "url" : "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json",
+      "version" : "3.0"
+    } ]
+  },
+  "servers" : [ {
+    "url" : "https://checkout-test.adyen.com/v1"
+  } ],
+  "paths" : {
+    "/originKeys" : {
+      "post" : {
+        "summary" : "Create originKey values for one or more merchant domains.",
+        "description" : "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.",
+        "requestBody" : {
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/CheckoutUtilityRequest"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "OK - the request has succeeded.",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/CheckoutUtilityResponse"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Bad Request - a problem reading or understanding the request."
+          },
+          "401" : {
+            "description" : "Unauthorized - authentication required."
+          },
+          "403" : {
+            "description" : "Forbidden - insufficient permissions to process the request."
+          },
+          "422" : {
+            "description" : "Unprocessable Entity - a request validation error."
+          },
+          "500" : {
+            "description" : "Internal Server Error - the server could not process the request."
+          }
+        },
+        "x-groupName" : "General",
+        "x-sortIndex" : 0
+      }
+    }
+  },
+  "components" : {
+    "schemas" : {
+      "CheckoutUtilityRequest" : {
+        "properties" : {
+          "originDomains" : {
+            "description" : "The list of origin domains, for which origin keys are requested.",
+            "type" : "array",
+            "items" : {
+              "type" : "string"
+            }
+          }
+        },
+        "required" : [ "originDomains" ]
+      },
+      "CheckoutUtilityResponse" : {
+        "properties" : {
+          "originKeys" : {
+            "description" : "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.",
+            "type" : "object",
+            "additionalProperties" : {
+              "type" : "string"
+            }
+          }
+        }
+      }
+    }
+  },
+  "x-groups" : [ "General" ]
+}
\ No newline at end of file
diff --git a/gen-api-ex/petstore-v2-actual.json b/gen-api-ex/petstore-v2-actual.json
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/gen-api-ex/petstore-v2-expected.json b/gen-api-ex/petstore-v2-expected.json
new file mode 100644
index 0000000000000000000000000000000000000000..59ea6f3d163d188f496430ddec24a2adf9c5bc84
--- /dev/null
+++ b/gen-api-ex/petstore-v2-expected.json
@@ -0,0 +1,992 @@
+{
+  "openapi" : "3.0.0",
+  "info" : {
+    "description" : "This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.",
+    "license" : {
+      "name" : "Apache-2.0",
+      "url" : "https://www.apache.org/licenses/LICENSE-2.0.html"
+    },
+    "title" : "OpenAPI Petstore",
+    "version" : "1.0.0"
+  },
+  "servers" : [ {
+    "url" : "https://petstore.swagger.io/v2"
+  } ],
+  "tags" : [ {
+    "name" : "pet",
+    "description" : "Everything about your Pets"
+  }, {
+    "name" : "store",
+    "description" : "Access to Petstore orders"
+  }, {
+    "name" : "user",
+    "description" : "Operations about user"
+  } ],
+  "paths" : {
+    "/pet" : {
+      "put" : {
+        "tags" : [ "pet" ],
+        "summary" : "Update an existing pet",
+        "description" : "",
+        "operationId" : "updatePet",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/Pet"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid ID supplied"
+          },
+          "404" : {
+            "description" : "Pet not found"
+          },
+          "405" : {
+            "description" : "Validation exception"
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "write:pets", "read:pets" ]
+        } ]
+      },
+      "post" : {
+        "tags" : [ "pet" ],
+        "summary" : "Add a new pet to the store",
+        "description" : "",
+        "operationId" : "addPet",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/Pet"
+        },
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              }
+            }
+          },
+          "405" : {
+            "description" : "Invalid input"
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "write:pets", "read:pets" ]
+        } ]
+      }
+    },
+    "/pet/findByStatus" : {
+      "get" : {
+        "tags" : [ "pet" ],
+        "summary" : "Finds Pets by status",
+        "description" : "Multiple status values can be provided with comma separated strings",
+        "operationId" : "findPetsByStatus",
+        "parameters" : [ {
+          "deprecated" : true,
+          "description" : "Status values that need to be considered for filter",
+          "explode" : false,
+          "required" : true,
+          "schema" : {
+            "type" : "array",
+            "items" : {
+              "type" : "string",
+              "default" : "available",
+              "enum" : [ "available", "pending", "sold" ]
+            }
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "status"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "type" : "array",
+                  "items" : {
+                    "$ref" : "#/components/schemas/Pet"
+                  }
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "array",
+                  "items" : {
+                    "$ref" : "#/components/schemas/Pet"
+                  }
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid status value"
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "read:pets" ]
+        } ]
+      }
+    },
+    "/pet/findByTags" : {
+      "get" : {
+        "tags" : [ "pet" ],
+        "summary" : "Finds Pets by tags",
+        "description" : "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.",
+        "operationId" : "findPetsByTags",
+        "parameters" : [ {
+          "description" : "Tags to filter by",
+          "explode" : false,
+          "required" : true,
+          "schema" : {
+            "type" : "array",
+            "items" : {
+              "type" : "string"
+            }
+          },
+          "style" : "form",
+          "in" : "query",
+          "name" : "tags"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "type" : "array",
+                  "items" : {
+                    "$ref" : "#/components/schemas/Pet"
+                  }
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "array",
+                  "items" : {
+                    "$ref" : "#/components/schemas/Pet"
+                  }
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid tag value"
+          }
+        },
+        "deprecated" : true,
+        "security" : [ {
+          "petstore_auth" : [ "read:pets" ]
+        } ]
+      }
+    },
+    "/pet/{petId}" : {
+      "get" : {
+        "tags" : [ "pet" ],
+        "summary" : "Find pet by ID",
+        "description" : "Returns a single pet",
+        "operationId" : "getPetById",
+        "parameters" : [ {
+          "description" : "ID of pet to return",
+          "required" : true,
+          "schema" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "in" : "path",
+          "name" : "petId"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Pet"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid ID supplied"
+          },
+          "404" : {
+            "description" : "Pet not found"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      },
+      "post" : {
+        "tags" : [ "pet" ],
+        "summary" : "Updates a pet in the store with form data",
+        "description" : "",
+        "operationId" : "updatePetWithForm",
+        "parameters" : [ {
+          "description" : "ID of pet that needs to be updated",
+          "required" : true,
+          "schema" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "in" : "path",
+          "name" : "petId"
+        } ],
+        "requestBody" : {
+          "content" : {
+            "application/x-www-form-urlencoded" : {
+              "schema" : {
+                "properties" : {
+                  "name" : {
+                    "description" : "Updated name of the pet",
+                    "type" : "string"
+                  },
+                  "status" : {
+                    "description" : "Updated status of the pet",
+                    "type" : "string"
+                  }
+                },
+                "type" : "object"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "405" : {
+            "description" : "Invalid input"
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "write:pets", "read:pets" ]
+        } ]
+      },
+      "delete" : {
+        "tags" : [ "pet" ],
+        "summary" : "Deletes a pet",
+        "description" : "",
+        "operationId" : "deletePet",
+        "parameters" : [ {
+          "required" : false,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "header",
+          "name" : "api_key"
+        }, {
+          "description" : "Pet id to delete",
+          "required" : true,
+          "schema" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "in" : "path",
+          "name" : "petId"
+        } ],
+        "responses" : {
+          "400" : {
+            "description" : "Invalid pet value"
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "write:pets", "read:pets" ]
+        } ]
+      }
+    },
+    "/pet/{petId}/uploadImage" : {
+      "post" : {
+        "tags" : [ "pet" ],
+        "summary" : "uploads an image",
+        "description" : "",
+        "operationId" : "uploadFile",
+        "parameters" : [ {
+          "description" : "ID of pet to update",
+          "required" : true,
+          "schema" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "in" : "path",
+          "name" : "petId"
+        } ],
+        "requestBody" : {
+          "content" : {
+            "multipart/form-data" : {
+              "schema" : {
+                "properties" : {
+                  "additionalMetadata" : {
+                    "description" : "Additional data to pass to server",
+                    "type" : "string"
+                  },
+                  "file" : {
+                    "description" : "file to upload",
+                    "format" : "binary",
+                    "type" : "string"
+                  }
+                },
+                "type" : "object"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/ApiResponse"
+                }
+              }
+            }
+          }
+        },
+        "security" : [ {
+          "petstore_auth" : [ "write:pets", "read:pets" ]
+        } ]
+      }
+    },
+    "/store/inventory" : {
+      "get" : {
+        "tags" : [ "store" ],
+        "summary" : "Returns pet inventories by status",
+        "description" : "Returns a map of status codes to quantities",
+        "operationId" : "getInventory",
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/json" : {
+                "schema" : {
+                  "type" : "object",
+                  "additionalProperties" : {
+                    "format" : "int32",
+                    "type" : "integer"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    },
+    "/store/order" : {
+      "post" : {
+        "tags" : [ "store" ],
+        "summary" : "Place an order for a pet",
+        "description" : "",
+        "operationId" : "placeOrder",
+        "requestBody" : {
+          "description" : "order placed for purchasing the pet",
+          "required" : true,
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/Order"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Order"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Order"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid Order"
+          }
+        }
+      }
+    },
+    "/store/order/{orderId}" : {
+      "get" : {
+        "tags" : [ "store" ],
+        "summary" : "Find purchase order by ID",
+        "description" : "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions",
+        "operationId" : "getOrderById",
+        "parameters" : [ {
+          "description" : "ID of pet that needs to be fetched",
+          "required" : true,
+          "schema" : {
+            "format" : "int64",
+            "maximum" : 10,
+            "minimum" : 1,
+            "type" : "integer"
+          },
+          "in" : "path",
+          "name" : "orderId"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Order"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/Order"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid ID supplied"
+          },
+          "404" : {
+            "description" : "Order not found"
+          }
+        }
+      },
+      "delete" : {
+        "tags" : [ "store" ],
+        "summary" : "Delete purchase order by ID",
+        "description" : "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors",
+        "operationId" : "deleteOrder",
+        "parameters" : [ {
+          "description" : "ID of the order that needs to be deleted",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "path",
+          "name" : "orderId"
+        } ],
+        "responses" : {
+          "400" : {
+            "description" : "Invalid ID supplied"
+          },
+          "404" : {
+            "description" : "Order not found"
+          }
+        }
+      }
+    },
+    "/user" : {
+      "post" : {
+        "tags" : [ "user" ],
+        "summary" : "Create user",
+        "description" : "This can only be done by the logged in user.",
+        "operationId" : "createUser",
+        "requestBody" : {
+          "description" : "Created user object",
+          "required" : true,
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/User"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "default" : {
+            "description" : "successful operation"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    },
+    "/user/createWithArray" : {
+      "post" : {
+        "tags" : [ "user" ],
+        "summary" : "Creates list of users with given input array",
+        "description" : "",
+        "operationId" : "createUsersWithArrayInput",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/UserArray"
+        },
+        "responses" : {
+          "default" : {
+            "description" : "successful operation"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    },
+    "/user/createWithList" : {
+      "post" : {
+        "tags" : [ "user" ],
+        "summary" : "Creates list of users with given input array",
+        "description" : "",
+        "operationId" : "createUsersWithListInput",
+        "requestBody" : {
+          "$ref" : "#/components/requestBodies/UserArray"
+        },
+        "responses" : {
+          "default" : {
+            "description" : "successful operation"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    },
+    "/user/login" : {
+      "get" : {
+        "tags" : [ "user" ],
+        "summary" : "Logs user into the system",
+        "description" : "",
+        "operationId" : "loginUser",
+        "parameters" : [ {
+          "description" : "The user name for login",
+          "required" : true,
+          "schema" : {
+            "pattern" : "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$",
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "username"
+        }, {
+          "description" : "The password for login in clear text",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "query",
+          "name" : "password"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "headers" : {
+              "Set-Cookie" : {
+                "description" : "Cookie authentication key for use with the `api_key` apiKey authentication.",
+                "schema" : {
+                  "example" : "AUTH_KEY=abcde12345; Path=/; HttpOnly",
+                  "type" : "string"
+                }
+              },
+              "X-Rate-Limit" : {
+                "description" : "calls per hour allowed by the user",
+                "schema" : {
+                  "format" : "int32",
+                  "type" : "integer"
+                }
+              },
+              "X-Expires-After" : {
+                "description" : "date in UTC when token expires",
+                "schema" : {
+                  "format" : "date-time",
+                  "type" : "string"
+                }
+              }
+            },
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "type" : "string"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "type" : "string"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid username/password supplied"
+          }
+        }
+      }
+    },
+    "/user/logout" : {
+      "get" : {
+        "tags" : [ "user" ],
+        "summary" : "Logs out current logged in user session",
+        "description" : "",
+        "operationId" : "logoutUser",
+        "responses" : {
+          "default" : {
+            "description" : "successful operation"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    },
+    "/user/{username}" : {
+      "get" : {
+        "tags" : [ "user" ],
+        "summary" : "Get user by user name",
+        "description" : "",
+        "operationId" : "getUserByName",
+        "parameters" : [ {
+          "description" : "The name that needs to be fetched. Use user1 for testing.",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "path",
+          "name" : "username"
+        } ],
+        "responses" : {
+          "200" : {
+            "description" : "successful operation",
+            "content" : {
+              "application/xml" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/User"
+                }
+              },
+              "application/json" : {
+                "schema" : {
+                  "$ref" : "#/components/schemas/User"
+                }
+              }
+            }
+          },
+          "400" : {
+            "description" : "Invalid username supplied"
+          },
+          "404" : {
+            "description" : "User not found"
+          }
+        }
+      },
+      "put" : {
+        "tags" : [ "user" ],
+        "summary" : "Updated user",
+        "description" : "This can only be done by the logged in user.",
+        "operationId" : "updateUser",
+        "parameters" : [ {
+          "description" : "name that need to be deleted",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "path",
+          "name" : "username"
+        } ],
+        "requestBody" : {
+          "description" : "Updated user object",
+          "required" : true,
+          "content" : {
+            "application/json" : {
+              "schema" : {
+                "$ref" : "#/components/schemas/User"
+              }
+            }
+          }
+        },
+        "responses" : {
+          "400" : {
+            "description" : "Invalid user supplied"
+          },
+          "404" : {
+            "description" : "User not found"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      },
+      "delete" : {
+        "tags" : [ "user" ],
+        "summary" : "Delete user",
+        "description" : "This can only be done by the logged in user.",
+        "operationId" : "deleteUser",
+        "parameters" : [ {
+          "description" : "The name that needs to be deleted",
+          "required" : true,
+          "schema" : {
+            "type" : "string"
+          },
+          "in" : "path",
+          "name" : "username"
+        } ],
+        "responses" : {
+          "400" : {
+            "description" : "Invalid username supplied"
+          },
+          "404" : {
+            "description" : "User not found"
+          }
+        },
+        "security" : [ {
+          "api_key" : [ ]
+        } ]
+      }
+    }
+  },
+  "components" : {
+    "requestBodies" : {
+      "UserArray" : {
+        "description" : "List of user object",
+        "required" : true,
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "type" : "array",
+              "items" : {
+                "$ref" : "#/components/schemas/User"
+              }
+            }
+          }
+        }
+      },
+      "Pet" : {
+        "description" : "Pet object that needs to be added to the store",
+        "required" : true,
+        "content" : {
+          "application/json" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Pet"
+            }
+          },
+          "application/xml" : {
+            "schema" : {
+              "$ref" : "#/components/schemas/Pet"
+            }
+          }
+        }
+      }
+    },
+    "schemas" : {
+      "Order" : {
+        "description" : "An order for a pets from the pet store",
+        "properties" : {
+          "id" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "petId" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "quantity" : {
+            "format" : "int32",
+            "type" : "integer"
+          },
+          "shipDate" : {
+            "format" : "date-time",
+            "type" : "string"
+          },
+          "status" : {
+            "description" : "Order Status",
+            "type" : "string",
+            "enum" : [ "placed", "approved", "delivered" ]
+          },
+          "complete" : {
+            "type" : "boolean",
+            "default" : false
+          }
+        },
+        "type" : "object",
+        "title" : "Pet Order",
+        "xml" : {
+          "name" : "Order"
+        }
+      },
+      "Category" : {
+        "description" : "A category for a pet",
+        "properties" : {
+          "id" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "name" : {
+            "pattern" : "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$",
+            "type" : "string"
+          }
+        },
+        "type" : "object",
+        "title" : "Pet category",
+        "xml" : {
+          "name" : "Category"
+        }
+      },
+      "User" : {
+        "description" : "A User who is purchasing from the pet store",
+        "properties" : {
+          "id" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "username" : {
+            "type" : "string"
+          },
+          "firstName" : {
+            "type" : "string"
+          },
+          "lastName" : {
+            "type" : "string"
+          },
+          "email" : {
+            "type" : "string"
+          },
+          "password" : {
+            "type" : "string"
+          },
+          "phone" : {
+            "type" : "string"
+          },
+          "userStatus" : {
+            "description" : "User Status",
+            "format" : "int32",
+            "type" : "integer"
+          }
+        },
+        "type" : "object",
+        "title" : "a User",
+        "xml" : {
+          "name" : "User"
+        }
+      },
+      "Tag" : {
+        "description" : "A tag for a pet",
+        "properties" : {
+          "id" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "name" : {
+            "type" : "string"
+          }
+        },
+        "type" : "object",
+        "title" : "Pet Tag",
+        "xml" : {
+          "name" : "Tag"
+        }
+      },
+      "Pet" : {
+        "description" : "A pet for sale in the pet store",
+        "properties" : {
+          "id" : {
+            "format" : "int64",
+            "type" : "integer"
+          },
+          "category" : {
+            "$ref" : "#/components/schemas/Category"
+          },
+          "name" : {
+            "example" : "doggie",
+            "type" : "string"
+          },
+          "photoUrls" : {
+            "type" : "array",
+            "xml" : {
+              "name" : "photoUrl",
+              "wrapped" : true
+            },
+            "items" : {
+              "type" : "string"
+            }
+          },
+          "tags" : {
+            "type" : "array",
+            "xml" : {
+              "name" : "tag",
+              "wrapped" : true
+            },
+            "items" : {
+              "$ref" : "#/components/schemas/Tag"
+            }
+          },
+          "status" : {
+            "description" : "pet status in the store",
+            "deprecated" : true,
+            "type" : "string",
+            "enum" : [ "available", "pending", "sold" ]
+          }
+        },
+        "type" : "object",
+        "title" : "a Pet",
+        "xml" : {
+          "name" : "Pet"
+        },
+        "required" : [ "name", "photoUrls" ]
+      },
+      "ApiResponse" : {
+        "description" : "Describes the result of uploading an image resource",
+        "properties" : {
+          "code" : {
+            "format" : "int32",
+            "type" : "integer"
+          },
+          "type" : {
+            "type" : "string"
+          },
+          "message" : {
+            "type" : "string"
+          }
+        },
+        "type" : "object",
+        "title" : "An uploaded response"
+      }
+    },
+    "securitySchemes" : {
+      "petstore_auth" : {
+        "type" : "oauth2",
+        "flows" : {
+          "implicit" : {
+            "authorizationUrl" : "http://petstore.swagger.io/api/oauth/dialog",
+            "scopes" : {
+              "write:pets" : "modify pets in your account",
+              "read:pets" : "read your pets"
+            }
+          }
+        }
+      },
+      "api_key" : {
+        "type" : "apiKey",
+        "name" : "api_key",
+        "in" : "header"
+      }
+    }
+  },
+  "externalDocs" : {
+    "description" : "Find out more about Swagger",
+    "url" : "http://swagger.io"
+  }
+}
\ No newline at end of file
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
index 6337e90ea0c765c8009b7954ec1b6a29e7c743ca..9e6d4b58d3cd5d5143e4240f3be826760cc37803 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ASTNode.java
@@ -486,7 +486,7 @@ public class ASTNode<T extends ASTNode> implements Cloneable {
   }
   /**
    * @aspect <NoAspect>
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16
    */
     /** @apilevel internal */
   protected void collect_contributors_OpenAPIObject_schemaTuples(OpenAPIObject _root, java.util.Map<ASTNode, java.util.Set<ASTNode>> _map) {
@@ -495,16 +495,16 @@ public class ASTNode<T extends ASTNode> implements Cloneable {
     }
   }
   /** @apilevel internal */
-  protected void contributeTo_OpenAPIObject_schemaTuples(java.util.Set<SchemaTuple> collection) {
+  protected void contributeTo_OpenAPIObject_schemaTuples(Set<SchemaTuple> collection) {
   }
 
   /**
    * @attribute inh
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13")
   public OpenAPIObject root() {
     if (root_visited) {
       throw new RuntimeException("Circular definition of attribute ASTNode.root().");
@@ -537,7 +537,7 @@ protected boolean root_visited = false;
   }
 
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:19
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:14
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute root
    */
@@ -557,7 +557,7 @@ protected boolean root_visited = false;
   }
 
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:22
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute inferUrl
    */
@@ -577,7 +577,7 @@ protected boolean root_visited = false;
   }
 
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:84
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute generateUrl
    */
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
index c59221f39359a1ecb9b27aedab5e2f91249d3e14..f44a1adf62cb56e0ba62e5cbbf4ab83edfd96cdd 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Delete.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
index 2ae57182ecf8f22cf7873b675425b6c5e2eba8c4..c79388d26e81f8f9188cdf0d0858995cea148c10 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Get.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -207,10 +207,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
index 1aa2326979af9d5d2fe885667d09e7075355bbc2..9d81857331ccee4116e41c135cb383ab565bf602 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Head.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
index 0ea8197f3a44cb799d6ff8353e92df281b20e732..ff1db0e66b1db4444098bbc9e3be0c1c7a4e5ba7 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OpenAPIObject.java
@@ -128,7 +128,8 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable {
         for( PathsObject p : this.getPathsObjects() )
             p.generateUrl(responses);
 
-        System.out.println(responses.size());        /*
+        System.out.println(responses.size());
+        /*
         for( String path : urls ){
         if( path.endsWith("GET") ){
         System.out.println(this.getServerObject(0).getUrl() + path.substring(0, path.length()-3));
@@ -1089,7 +1090,7 @@ public class OpenAPIObject extends ASTNode<ASTNode> implements Cloneable {
   }
   /**
    * @aspect <NoAspect>
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16
    */
   /** @apilevel internal */
 protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIObject_schemaTuples = null;
@@ -1103,7 +1104,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
   }
 
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13
    * @apilevel internal
    */
   public OpenAPIObject Define_root(ASTNode _callerNode, ASTNode _childNode) {
@@ -1111,7 +1112,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
     return this;
   }
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:18
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:13
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute root
    */
@@ -1119,12 +1120,12 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
     return true;
   }
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20
    * @apilevel internal
    */
   public Set<String> Define_inferUrl(ASTNode _callerNode, ASTNode _childNode, Set<String> urls) {
     if (_callerNode == getPathsObjectListNoTransform()) {
-      // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:22
+      // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21
       int i = _callerNode.getIndexOfChild(_childNode);
       {
               PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject();
@@ -1143,7 +1144,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
     }
   }
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute inferUrl
    */
@@ -1151,12 +1152,12 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
     return true;
   }
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83
    * @apilevel internal
    */
   public Map<ResponseObject, String> Define_generateUrl(ASTNode _callerNode, ASTNode _childNode, Map<ResponseObject, String> responses) {
     if (_callerNode == getPathsObjectListNoTransform()) {
-      // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83
+      // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:84
       int i = _callerNode.getIndexOfChild(_childNode);
       {
               PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject();
@@ -1177,7 +1178,7 @@ protected java.util.Map<ASTNode, java.util.Set<ASTNode>> contributorMap_OpenAPIO
     }
   }
   /**
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83
    * @apilevel internal
    * @return {@code true} if this node has an equation for the inherited attribute generateUrl
    */
@@ -1197,11 +1198,11 @@ protected boolean OpenAPIObject_schemaTuples_visited = false;
   /**
    * @attribute coll
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.COLL)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:15")
-  public java.util.Set<SchemaTuple> schemaTuples() {
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16")
+  public Set<SchemaTuple> schemaTuples() {
     ASTState state = state();
     if (OpenAPIObject_schemaTuples_computed == ASTState.NON_CYCLE || OpenAPIObject_schemaTuples_computed == state().cycle()) {
       return OpenAPIObject_schemaTuples_value;
@@ -1222,14 +1223,14 @@ protected boolean OpenAPIObject_schemaTuples_visited = false;
     return OpenAPIObject_schemaTuples_value;
   }
   /** @apilevel internal */
-  private java.util.Set<SchemaTuple> schemaTuples_compute() {
+  private Set<SchemaTuple> schemaTuples_compute() {
     ASTNode node = this;
     while (node != null && !(node instanceof OpenAPIObject)) {
       node = node.getParent();
     }
     OpenAPIObject root = (OpenAPIObject) node;
     root.survey_OpenAPIObject_schemaTuples();
-    java.util.Set<SchemaTuple> _computedValue = new java.util.HashSet<>();
+    Set<SchemaTuple> _computedValue = new HashSet<>();
     if (root.contributorMap_OpenAPIObject_schemaTuples.containsKey(this)) {
       for (ASTNode contributor : root.contributorMap_OpenAPIObject_schemaTuples.get(this)) {
         contributor.contributeTo_OpenAPIObject_schemaTuples(_computedValue);
@@ -1241,6 +1242,6 @@ protected boolean OpenAPIObject_schemaTuples_visited = false;
   protected ASTState.Cycle OpenAPIObject_schemaTuples_computed = null;
 
   /** @apilevel internal */
-  protected java.util.Set<SchemaTuple> OpenAPIObject_schemaTuples_value;
+  protected Set<SchemaTuple> OpenAPIObject_schemaTuples_value;
 
 }
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java
index 23953274f5ccbadac5b67344aa4affd4cc1bc719..e4a48bdc6761ba46f7ffcaa8ffd4cffd1d77f023 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationOb.java
@@ -101,18 +101,18 @@ public abstract class OperationOb extends ASTNode<ASTNode> implements Cloneable
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public abstract String inferRandomUrl(String pathRef, OperationObject operationObject);
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public abstract String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses);
   /** @apilevel internal */
   public ASTNode rewriteTo() {
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
index 8104e7f30936d994aeb234e9f236c1487ffcb8c8..377813381d8f140c655f9bae14efea5186b51cc1 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/OperationObject.java
@@ -136,7 +136,7 @@ public class OperationObject extends OperationOb implements Cloneable {
         }
   /**
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:376
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:377
    */
   public String generateRandomString(Random rand, JastAddList<EnumObj> objs) {
         if( objs.getNumChild() != 0 )
@@ -150,7 +150,7 @@ public class OperationObject extends OperationOb implements Cloneable {
     }
   /**
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:387
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:388
    */
   public String generateRandomInt(Random rand, int minimum, int maximum){
         if( minimum > -1 && maximum > 0 )
@@ -1293,10 +1293,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -1314,30 +1314,28 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
     }
   }
 /** @apilevel internal */
-protected java.util.Set getDict_Set_SchemaTuple__Map_ResponseObject__String__visited;
+protected java.util.Set addDict_Map_ResponseObject__String__visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:65
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:64
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:65")
-  public Map<String, List<String>> getDict(Set<SchemaTuple> tuples, Map<ResponseObject, String> responses) {
-    java.util.List _parameters = new java.util.ArrayList(2);
-    _parameters.add(tuples);
-    _parameters.add(responses);
-    if (getDict_Set_SchemaTuple__Map_ResponseObject__String__visited == null) getDict_Set_SchemaTuple__Map_ResponseObject__String__visited = new java.util.HashSet(4);
-    if (getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.contains(_parameters)) {
-      throw new RuntimeException("Circular definition of attribute OperationObject.getDict(Set_SchemaTuple_,Map_ResponseObject__String_).");
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:64")
+  public Map<String, List<String>> addDict(Map<ResponseObject, String> responses) {
+    Object _parameters = responses;
+    if (addDict_Map_ResponseObject__String__visited == null) addDict_Map_ResponseObject__String__visited = new java.util.HashSet(4);
+    if (addDict_Map_ResponseObject__String__visited.contains(_parameters)) {
+      throw new RuntimeException("Circular definition of attribute OperationObject.addDict(Map_ResponseObject__String_).");
     }
-    getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.add(_parameters);
+    addDict_Map_ResponseObject__String__visited.add(_parameters);
     try {
             Map<String, List<String>> map = new HashMap<>();
     
             return map;
         }
     finally {
-      getDict_Set_SchemaTuple__Map_ResponseObject__String__visited.remove(_parameters);
+      addDict_Map_ResponseObject__String__visited.remove(_parameters);
     }
   }
 /** @apilevel internal */
@@ -1345,10 +1343,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
index 07a19195e9c30a83def03eee34caeb2740291c42..95f709cd36aa725dd2f9ece8c3ba31aa6d7ca168 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Options.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
index a00d115eeefda6e1c3a0c2dd1ff20ffc303a6f4d..e352fe278c88505d290779e81a8b77063c160e66 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/ParameterObject.java
@@ -825,24 +825,6 @@ protected java.util.Set composeParameter_ParameterOb_Map_Object__ASTNode__visite
     }
   }
 /** @apilevel internal */
-protected boolean schemaObject_visited = false;
-  /**
-   * @attribute syn
-   * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:3
-   */
-  @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:3")
-  public SchemaObject schemaObject() {
-    if (schemaObject_visited) {
-      throw new RuntimeException("Circular definition of attribute ParameterObject.schemaObject().");
-    }
-    schemaObject_visited = true;
-    SchemaObject schemaObject_value = getSchemaOb().schemaObject();
-    schemaObject_visited = false;
-    return schemaObject_value;
-  }
-/** @apilevel internal */
 protected boolean parameterObject_visited = false;
   /**
    * @attribute syn
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
index 5272217392c1caf8753f25be18c1f2805d5be001..f70f6436035e94e133fd0b41e46378ed4ee9a0e2 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Patch.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
index 6b24d4f0b56d5aed9798dd8d21a7904f87e3156e..a160031a3d262dd51f189c9aad2a091d02e03543 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/PathsObject.java
@@ -207,10 +207,10 @@ public class PathsObject extends ASTNode<ASTNode> implements Cloneable {
   /**
    * @attribute inh
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:21")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:20")
   public Set<String> inferUrl(Set<String> urls) {
     Object _parameters = urls;
     if (inferUrl_Set_String__visited == null) inferUrl_Set_String__visited = new java.util.HashSet(4);
@@ -227,10 +227,10 @@ protected java.util.Set inferUrl_Set_String__visited;
   /**
    * @attribute inh
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.INH)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:82")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:83")
   public Map<ResponseObject, String> generateUrl(Map<ResponseObject, String> responses) {
     Object _parameters = responses;
     if (generateUrl_Map_ResponseObject__String__visited == null) generateUrl_Map_ResponseObject__String__visited = new java.util.HashSet(4);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
index 4e56710065a02ad3cf3df460848e489f5b1caecb..ddab0d5bdb8766e30d2b347dbc4d7290dee205a2 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Post.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -207,10 +207,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
index 3f15eda0eeee8250639fc2a103fc788d7e94a4c4..24bd11ab0ce05e278e14808bb4242cf3db718cbc 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Put.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
index 3f676540ecaff3eb8c820a700769c623388b43d7..2529060da31b2f23aecc09fcd367698b6ccb6bd6 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/SchemaTuple.java
@@ -214,7 +214,7 @@ public class SchemaTuple extends ASTNode<ASTNode> implements Cloneable {
   }
   /** @apilevel internal */
   protected void collect_contributors_OpenAPIObject_schemaTuples(OpenAPIObject _root, java.util.Map<ASTNode, java.util.Set<ASTNode>> _map) {
-    // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:16
+    // @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:17
     {
       java.util.Set<ASTNode> contributors = _map.get(_root);
       if (contributors == null) {
@@ -226,7 +226,7 @@ public class SchemaTuple extends ASTNode<ASTNode> implements Cloneable {
     super.collect_contributors_OpenAPIObject_schemaTuples(_root, _map);
   }
   /** @apilevel internal */
-  protected void contributeTo_OpenAPIObject_schemaTuples(java.util.Set<SchemaTuple> collection) {
+  protected void contributeTo_OpenAPIObject_schemaTuples(Set<SchemaTuple> collection) {
     super.contributeTo_OpenAPIObject_schemaTuples(collection);
     collection.add(this);
   }
diff --git a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
index 3d747775b2322550e4bee8896043bc6a878308f7..88c142f23e65ee04fed8cab9bd8538a37be4d5b4 100644
--- a/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
+++ b/src/gen/java/de/tudresden/inf/st/openapi/ast/Trace.java
@@ -181,10 +181,10 @@ protected java.util.Set inferRandomUrl_String_OperationObject_visited;
   /**
    * @attribute syn
    * @aspect InfSchema
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:34")
+  @ASTNodeAnnotation.Source(aspect="InfSchema", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\InfSchema.jrag:33")
   public String inferRandomUrl(String pathRef, OperationObject operationObject) {
     java.util.List _parameters = new java.util.ArrayList(2);
     _parameters.add(pathRef);
@@ -206,10 +206,10 @@ protected java.util.Set generateRandomUrl_String_OperationObject_Map_ResponseObj
   /**
    * @attribute syn
    * @aspect RandomRequestGenerator
-   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96
+   * @declaredat E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97
    */
   @ASTNodeAnnotation.Attribute(kind=ASTNodeAnnotation.Kind.SYN)
-  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:96")
+  @ASTNodeAnnotation.Source(aspect="RandomRequestGenerator", declaredAt="E:\\bachelor-thesis\\SigTest\\bachelor-thesis-jastadd\\src\\main\\jastadd\\RandomRequestGenerator.jrag:97")
   public String generateRandomUrl(String pathRef, OperationObject operationObject, Map<ResponseObject, String> responses) {
     java.util.List _parameters = new java.util.ArrayList(3);
     _parameters.add(pathRef);
diff --git a/src/main/jastadd/InfSchema.jrag b/src/main/jastadd/InfSchema.jrag
index 0685d401d38e98815c19eefe85811fc023778182..13750b83650a00374abdf856fa75b49671eee63f 100644
--- a/src/main/jastadd/InfSchema.jrag
+++ b/src/main/jastadd/InfSchema.jrag
@@ -1,7 +1,5 @@
 aspect InfSchema {
 
-    syn SchemaObject ParameterObject.schemaObject() = getSchemaOb().schemaObject();
-
     // syn Set<SchemaObject> ResponseObject.schemaObject () = for( ContentTuple c : getContentTuples() ) add.SchemaObject();
 
 
@@ -10,14 +8,15 @@ aspect InfSchema {
     SchemaOb contributes this
       when schemaObject()
       to OpenAPIObject.collectSchemaObs();
-         */
-
-    coll java.util.Set<SchemaTuple> OpenAPIObject.schemaTuples() [new java.util.HashSet<>()] root OpenAPIObject;
-        SchemaTuple contributes this to OpenAPIObject.schemaTuples();
+    */
 
     inh OpenAPIObject ASTNode.root();
     eq OpenAPIObject.getChild().root() = this;
 
+    coll Set<SchemaTuple> OpenAPIObject.schemaTuples() [new HashSet<>()] root OpenAPIObject;
+        SchemaTuple contributes this
+        to OpenAPIObject.schemaTuples();
+
     inh Set<String> PathsObject.inferUrl(Set<String> urls);
     eq OpenAPIObject.getPathsObject(int i).inferUrl(Set<String> urls) {
         PathItemObject p = ((PathsObject) _childNode).getPathItemOb().pathItemObject();
@@ -62,7 +61,7 @@ aspect InfSchema {
         return "";
     }
 
-    syn Map<String, List<String>> OperationObject.getDict (Set<SchemaTuple> tuples, Map<ResponseObject, String> responses){
+    syn Map<String, List<String>> OperationObject.addDict (Map<ResponseObject, String> responses){
         Map<String, List<String>> map = new HashMap<>();
 
         return map;
diff --git a/src/main/resources/1password.com-events-1.0.0.json b/src/main/resources/1password.com-events-1.0.0.json
deleted file mode 100644
index 503bd16ffec96123ae4000b54e372892f8953977..0000000000000000000000000000000000000000
--- a/src/main/resources/1password.com-events-1.0.0.json
+++ /dev/null
@@ -1,518 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "description": "1Password",
-      "url": "https://events.1password.com"
-    },
-    {
-      "description": "1Password CA",
-      "url": "https://events.1password.ca"
-    },
-    {
-      "description": "1Password EU",
-      "url": "https://events.1password.eu"
-    },
-    {
-      "description": "1Password Enterprise",
-      "url": "https://events.ent.1password.com"
-    }
-  ],
-  "info": {
-    "description": "1Password Events API Specification.",
-    "title": "Events API",
-    "version": "1.0.0",
-    "x-apisguru-categories": [
-      "security"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_upload.wikimedia.org_wikipedia_commons_thumb_e_e3_1password-logo.svg_1280px-1password-logo.svg.png"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://i.1password.com/media/1password-events-reporting/1password-events-api.yaml",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "1password.com",
-    "x-serviceName": "events"
-  },
-  "paths": {
-    "/api/auth/introspect": {
-      "get": {
-        "operationId": "getAuthIntrospect",
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/IntrospectResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Performs introspection of the provided Bearer JWT token",
-        "tags": [
-          "auth"
-        ]
-      }
-    },
-    "/api/v1/itemusages": {
-      "post": {
-        "description": "This endpoint requires your JSON Web Token to have the *itemusages* feature.",
-        "operationId": "getItemUsages",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/ItemUsagesRequest"
-        },
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/ItemUsagesResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Retrieves item usages",
-        "tags": [
-          "api-v1"
-        ]
-      }
-    },
-    "/api/v1/signinattempts": {
-      "post": {
-        "description": "This endpoint requires your JSON Web Token to have the *signinattempts* feature.",
-        "operationId": "getSignInAttempts",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/SignInAttemptsRequest"
-        },
-        "responses": {
-          "200": {
-            "$ref": "#/components/responses/SignInAttemptsResponse"
-          },
-          "401": {
-            "$ref": "#/components/responses/UnauthorizedErrorResponse"
-          },
-          "default": {
-            "$ref": "#/components/responses/GenericErrorResponse"
-          }
-        },
-        "security": [
-          {
-            "jwtsa": []
-          }
-        ],
-        "summary": "Retrieves sign-in attempts",
-        "tags": [
-          "api-v1"
-        ]
-      }
-    }
-  },
-  "components": {
-    "examples": {
-      "Cursor": {
-        "summary": "Used for continued calling with a cursor",
-        "value": {
-          "cursor": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK"
-        }
-      },
-      "ResetCursor": {
-        "summary": "Used for reseting the cursor",
-        "value": {
-          "limit": 100,
-          "start_time": "2021-06-11T16:32:50-03:00"
-        }
-      }
-    },
-    "requestBodies": {
-      "CursorRequest": {
-        "content": {
-          "application/json": {
-            "examples": {
-              "Continuing cursor": {
-                "$ref": "#/components/examples/Cursor"
-              },
-              "Resetting cursor": {
-                "$ref": "#/components/examples/ResetCursor"
-              }
-            },
-            "schema": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/Cursor"
-                },
-                {
-                  "$ref": "#/components/schemas/ResetCursor"
-                }
-              ]
-            }
-          }
-        }
-      },
-      "ItemUsagesRequest": {
-        "$ref": "#/components/requestBodies/CursorRequest"
-      },
-      "SignInAttemptsRequest": {
-        "$ref": "#/components/requestBodies/CursorRequest"
-      }
-    },
-    "responses": {
-      "GenericErrorResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Generic error"
-      },
-      "IntrospectResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Introspection"
-            }
-          }
-        },
-        "description": "Introspection object"
-      },
-      "ItemUsagesResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/ItemUsageItems"
-            }
-          }
-        },
-        "description": "Item usages response object"
-      },
-      "SignInAttemptsResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/SignInAttemptItems"
-            }
-          }
-        },
-        "description": "Sign-in attempts response object"
-      },
-      "UnauthorizedErrorResponse": {
-        "content": {
-          "application/json": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Unauthorized"
-      }
-    },
-    "schemas": {
-      "Client": {
-        "description": "Metadata gathered about the client",
-        "properties": {
-          "app_name": {
-            "example": "1Password Extension",
-            "type": "string"
-          },
-          "app_version": {
-            "example": "20127",
-            "type": "string"
-          },
-          "ip_address": {
-            "example": "13.227.95.22",
-            "type": "string"
-          },
-          "os_name": {
-            "example": "MacOSX",
-            "type": "string"
-          },
-          "os_version": {
-            "example": "10.15.6",
-            "type": "string"
-          },
-          "platform_name": {
-            "example": "Chrome",
-            "type": "string"
-          },
-          "platform_version": {
-            "description": "Depending on the platform used, this can be the version of the browser that the client extension is installed, the model of computer that the native application is installed or the machine's CPU version that the CLI was installed",
-            "type": "string"
-          }
-        }
-      },
-      "Cursor": {
-        "description": "Cursor",
-        "properties": {
-          "cursor": {
-            "description": "Cursor to fetch more data if available or continue the polling process if required",
-            "example": "aGVsbG8hIGlzIGl0IG1lIHlvdSBhcmUgbG9va2luZyBmb3IK",
-            "type": "string"
-          }
-        }
-      },
-      "CursorCollection": {
-        "allOf": [
-          {
-            "$ref": "#/components/schemas/Cursor"
-          },
-          {
-            "properties": {
-              "has_more": {
-                "description": "Whether there may still be more data to fetch using the returned cursor. If true, the subsequent request could still be empty.",
-                "type": "boolean"
-              }
-            }
-          }
-        ],
-        "description": "Common cursor properties for collection responses"
-      },
-      "DateTimeRFC3339": {
-        "example": "2020-06-11T16:32:50-03:00",
-        "format": "date-time",
-        "type": "string"
-      },
-      "Details": {
-        "description": "Additional information about the sign-in attempt",
-        "properties": {
-          "value": {
-            "description": "For firewall prevented sign-ins, the value is the chosen continent, country, etc. that blocked the sign-in attempt",
-            "example": "Europe",
-            "type": "string"
-          }
-        }
-      },
-      "Error": {
-        "properties": {
-          "Error": {
-            "properties": {
-              "Message": {
-                "description": "The error message.",
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        },
-        "type": "object"
-      },
-      "Introspection": {
-        "properties": {
-          "Features": {
-            "example": [
-              "itemusages",
-              "signinattempts"
-            ],
-            "items": {
-              "type": "string"
-            },
-            "type": "array"
-          },
-          "IssuedAt": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "UUID": {
-            "type": "string"
-          }
-        },
-        "type": "object"
-      },
-      "ItemUsage": {
-        "description": "A single item usage object",
-        "properties": {
-          "client": {
-            "$ref": "#/components/schemas/Client"
-          },
-          "item_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "timestamp": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "used_version": {
-            "type": "integer"
-          },
-          "user": {
-            "$ref": "#/components/schemas/User"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "vault_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      },
-      "ItemUsageItems": {
-        "allOf": [
-          {
-            "properties": {
-              "items": {
-                "items": {
-                  "$ref": "#/components/schemas/ItemUsage"
-                },
-                "type": "array"
-              }
-            }
-          },
-          {
-            "$ref": "#/components/schemas/CursorCollection"
-          }
-        ],
-        "description": "An object wrapping cursor properties and a list of items usages"
-      },
-      "ResetCursor": {
-        "description": "Reset cursor",
-        "properties": {
-          "end_time": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "limit": {
-            "maximum": 1000,
-            "minimum": 1,
-            "type": "number"
-          },
-          "start_time": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          }
-        }
-      },
-      "SignInAttempt": {
-        "description": "A single sign-in attempt object",
-        "properties": {
-          "category": {
-            "enum": [
-              "success",
-              "credentials_failed",
-              "mfa_failed",
-              "modern_version_failed",
-              "firewall_failed",
-              "firewall_reported_success"
-            ],
-            "example": "firewall_failed",
-            "type": "string"
-          },
-          "client": {
-            "$ref": "#/components/schemas/Client"
-          },
-          "country": {
-            "description": "Country ISO Code",
-            "example": "France",
-            "type": "string"
-          },
-          "details": {
-            "$ref": "#/components/schemas/Details"
-          },
-          "session_uuid": {
-            "$ref": "#/components/schemas/UUID"
-          },
-          "target_user": {
-            "$ref": "#/components/schemas/User"
-          },
-          "timestamp": {
-            "$ref": "#/components/schemas/DateTimeRFC3339"
-          },
-          "type": {
-            "enum": [
-              "credentials_ok",
-              "mfa_ok",
-              "password_secret_bad",
-              "mfa_missing",
-              "totp_disabled",
-              "totp_bad",
-              "totp_timeout",
-              "u2f_disabled",
-              "u2f_bad",
-              "u2f_timout",
-              "duo_disabled",
-              "duo_bad",
-              "duo_timeout",
-              "duo_native_bad",
-              "platform_secret_disabled",
-              "platform_secret_bad",
-              "platform_secret_proxy",
-              "code_disabled",
-              "code_bad",
-              "code_timeout",
-              "ip_blocked",
-              "continent_blocked",
-              "country_blocked",
-              "anonymous_blocked",
-              "all_blocked",
-              "modern_version_missing",
-              "modern_version_old"
-            ],
-            "example": "continent_blocked",
-            "type": "string"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      },
-      "SignInAttemptItems": {
-        "allOf": [
-          {
-            "properties": {
-              "items": {
-                "items": {
-                  "$ref": "#/components/schemas/SignInAttempt"
-                },
-                "type": "array"
-              }
-            }
-          },
-          {
-            "$ref": "#/components/schemas/CursorCollection"
-          }
-        ],
-        "description": "An object wrapping cursor properties and a list of sign-in attempts"
-      },
-      "UUID": {
-        "example": "56YE2TYN2VFYRLNSHKPW5NVT5E",
-        "type": "string"
-      },
-      "User": {
-        "description": "User object",
-        "properties": {
-          "email": {
-            "format": "email",
-            "type": "string"
-          },
-          "name": {
-            "description": "Full name",
-            "example": "Jack O'Neill",
-            "type": "string"
-          },
-          "uuid": {
-            "$ref": "#/components/schemas/UUID"
-          }
-        }
-      }
-    },
-    "securitySchemes": {
-      "jwtsa": {
-        "bearerFormat": "JWT-SA",
-        "description": "A JWT SA token issued to this service",
-        "scheme": "bearer",
-        "type": "http"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/main/resources/6-dot-authentiqio.appspot.com-6.json b/src/main/resources/6-dot-authentiqio.appspot.com-6.json
deleted file mode 100644
index a59849b181dd559f4edf09085625cf2d19a901ee..0000000000000000000000000000000000000000
--- a/src/main/resources/6-dot-authentiqio.appspot.com-6.json
+++ /dev/null
@@ -1,998 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "url": "https://6-dot-authentiqio.appspot.com"
-    }
-  ],
-  "info": {
-    "contact": {
-      "email": "hello@authentiq.com",
-      "name": "Authentiq team",
-      "url": "http://authentiq.io/support"
-    },
-    "description": "Strong authentication, without the passwords.",
-    "license": {
-      "name": "Apache 2.0",
-      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
-    },
-    "termsOfService": "http://authentiq.com/terms/",
-    "title": "Authentiq API",
-    "version": "6",
-    "x-apisguru-categories": [
-      "security"
-    ],
-    "x-logo": {
-      "backgroundColor": "#F26641",
-      "url": "https://api.apis.guru/v2/cache/logo/https_www.authentiq.com_theme_images_authentiq-logo-a-inverse.svg"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://raw.githubusercontent.com/AuthentiqID/authentiq-docs/master/docs/swagger/issuer.yaml",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "6-dot-authentiqio.appspot.com"
-  },
-  "paths": {
-    "/key": {
-      "delete": {
-        "description": "Revoke an Authentiq ID using email & phone.\n\nIf called with `email` and `phone` only, a verification code \nwill be sent by email. Do a second call adding `code` to \ncomplete the revocation.\n",
-        "operationId": "key_revoke_nosecret",
-        "parameters": [
-          {
-            "description": "primary email associated to Key (ID)",
-            "in": "query",
-            "name": "email",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "description": "primary phone number, international representation",
-            "in": "query",
-            "name": "phone",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "description": "verification code sent by email",
-            "in": "query",
-            "name": "code",
-            "required": false,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "pending or done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully deleted"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Authentication error `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Confirm with code sent `confirm-first`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "delete"
-        ]
-      },
-      "post": {
-        "description": "Register a new ID `JWT(sub, devtoken)`\n\nv5: `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_register",
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "201": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "secret": {
-                      "description": "revoke key",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "registered",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully registered"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key already registered `duplicate-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "post"
-        ]
-      }
-    },
-    "/key/{PK}": {
-      "delete": {
-        "description": "Revoke an Identity (Key) with a revocation secret",
-        "operationId": "key_revoke",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          },
-          {
-            "description": "revokation secret",
-            "in": "query",
-            "name": "secret",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key not found / wrong code `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "delete"
-        ]
-      },
-      "get": {
-        "description": "Get public details of an Authentiq ID.\n",
-        "operationId": "key_retrieve",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "since": {
-                      "format": "date-time",
-                      "type": "string"
-                    },
-                    "status": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully retrieved"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "410": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key is revoked (gone). `revoked-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "get"
-        ]
-      },
-      "head": {
-        "description": "HEAD info on Authentiq ID\n",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Key exists"
-          },
-          "404": {
-            "content": {
-              "*/*": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "410": {
-            "content": {
-              "*/*": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Key is revoked `revoked-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "head"
-        ]
-      },
-      "post": {
-        "description": "update properties of an Authentiq ID.\n(not operational in v4; use PUT for now)\n\nv5: POST issuer-signed email & phone scopes in\na self-signed JWT\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_update",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "post"
-        ]
-      },
-      "put": {
-        "description": "Update Authentiq ID by replacing the object.\n\nv4: `JWT(sub,email,phone)` to bind email/phone hash; \n\nv5: POST issuer-signed email & phone scopes\nand PUT to update registration `JWT(sub, pk, devtoken, ...)`\n\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "key_bind",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/PK"
-          }
-        ],
-        "requestBody": {
-          "$ref": "#/components/requestBodies/AuthentiqID"
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unknown key `unknown-key`"
-          },
-          "409": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Already bound to another key `duplicate-hash`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "key",
-          "put"
-        ]
-      }
-    },
-    "/login": {
-      "post": {
-        "description": "push sign-in request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "push_login_request",
-        "parameters": [
-          {
-            "description": "URI App will connect to",
-            "in": "query",
-            "name": "callback",
-            "required": true,
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "requestBody": {
-          "content": {
-            "application/jwt": {
-              "schema": {
-                "$ref": "#/components/schemas/PushToken"
-              }
-            }
-          },
-          "description": "Push Token.",
-          "required": true
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "sent",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Unauthorized for this callback audience `aud-error` or JWT should be self-signed `auth-error`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "login",
-          "post"
-        ]
-      }
-    },
-    "/scope": {
-      "post": {
-        "description": "scope verification request\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "sign_request",
-        "parameters": [
-          {
-            "description": "test only mode, using test issuer",
-            "in": "query",
-            "name": "test",
-            "required": false,
-            "schema": {
-              "type": "integer"
-            }
-          }
-        ],
-        "requestBody": {
-          "content": {
-            "application/jwt": {
-              "schema": {
-                "$ref": "#/components/schemas/Claims"
-              }
-            }
-          },
-          "description": "Claims of scope",
-          "required": true
-        },
-        "responses": {
-          "201": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "job": {
-                      "description": "20-character ID",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "waiting",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response"
-          },
-          "429": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Too Many Requests on same address / number `rate-limit`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "post"
-        ]
-      }
-    },
-    "/scope/{job}": {
-      "delete": {
-        "description": "delete a verification job",
-        "operationId": "sign_delete",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "done",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully deleted"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "delete"
-        ]
-      },
-      "get": {
-        "description": "get the status / current content of a verification job",
-        "operationId": "sign_retrieve",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "exp": {
-                      "type": "integer"
-                    },
-                    "field": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              },
-              "application/jwt": {
-                "schema": {
-                  "properties": {
-                    "exp": {
-                      "type": "integer"
-                    },
-                    "field": {
-                      "type": "string"
-                    },
-                    "sub": {
-                      "description": "base64safe encoded public signing key",
-                      "type": "string"
-                    }
-                  },
-                  "title": "JWT",
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successful response (JWT)"
-          },
-          "204": {
-            "description": "Confirmed, waiting for signing"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              },
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "get"
-        ]
-      },
-      "head": {
-        "description": "HEAD to get the status of a verification job",
-        "operationId": "sign_retrieve_head",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "Confirmed and signed"
-          },
-          "204": {
-            "description": "Confirmed, waiting for signing"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "head"
-        ]
-      },
-      "post": {
-        "description": "this is a scope confirmation",
-        "operationId": "sign_confirm",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "202": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "properties": {
-                    "status": {
-                      "description": "confirmed",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully confirmed"
-          },
-          "401": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Confirmation error `auth-error`"
-          },
-          "404": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "405": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "JWT POSTed to scope `not-supported`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "post"
-        ]
-      },
-      "put": {
-        "description": "authority updates a JWT with its signature\nSee: https://github.com/skion/authentiq/wiki/JWT-Examples\n",
-        "operationId": "sign_update",
-        "parameters": [
-          {
-            "$ref": "#/components/parameters/JobID"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "properties": {
-                    "jwt": {
-                      "description": "result is JWT or JSON??",
-                      "type": "string"
-                    },
-                    "status": {
-                      "description": "ready",
-                      "type": "string"
-                    }
-                  },
-                  "type": "object"
-                }
-              }
-            },
-            "description": "Successfully updated"
-          },
-          "404": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not found `unknown-job`"
-          },
-          "409": {
-            "content": {
-              "application/jwt": {
-                "schema": {
-                  "$ref": "#/components/schemas/Error"
-                }
-              }
-            },
-            "description": "Job not confirmed yet `confirm-first`"
-          },
-          "default": {
-            "$ref": "#/components/responses/ErrorResponse"
-          }
-        },
-        "tags": [
-          "scope",
-          "put"
-        ]
-      }
-    }
-  },
-  "components": {
-    "parameters": {
-      "JobID": {
-        "description": "Job ID (20 chars)",
-        "in": "path",
-        "name": "job",
-        "required": true,
-        "schema": {
-          "type": "string"
-        }
-      },
-      "PK": {
-        "description": "Public Signing Key - Authentiq ID (43 chars)",
-        "in": "path",
-        "name": "PK",
-        "required": true,
-        "schema": {
-          "type": "string"
-        }
-      }
-    },
-    "requestBodies": {
-      "AuthentiqID": {
-        "content": {
-          "application/jwt": {
-            "schema": {
-              "$ref": "#/components/schemas/AuthentiqID"
-            }
-          }
-        },
-        "description": "Authentiq ID to register",
-        "required": true
-      }
-    },
-    "responses": {
-      "ErrorResponse": {
-        "content": {
-          "*/*": {
-            "schema": {
-              "$ref": "#/components/schemas/Error"
-            }
-          }
-        },
-        "description": "Error response"
-      }
-    },
-    "schemas": {
-      "AuthentiqID": {
-        "description": "Authentiq ID in JWT format, self-signed.\n",
-        "properties": {
-          "devtoken": {
-            "description": "device token for push messages",
-            "type": "string"
-          },
-          "sub": {
-            "description": "UUID and public signing key",
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub"
-        ]
-      },
-      "Claims": {
-        "description": "Claim in JWT format, self- or issuer-signed. \n",
-        "properties": {
-          "email": {
-            "type": "string"
-          },
-          "phone": {
-            "type": "string"
-          },
-          "scope": {
-            "description": "claim scope",
-            "type": "string"
-          },
-          "sub": {
-            "description": "UUID",
-            "type": "string"
-          },
-          "type": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub",
-          "scope"
-        ]
-      },
-      "Error": {
-        "properties": {
-          "detail": {
-            "type": "string"
-          },
-          "error": {
-            "type": "integer"
-          },
-          "title": {
-            "type": "string"
-          },
-          "type": {
-            "description": "unique uri for this error",
-            "type": "string"
-          }
-        },
-        "required": [
-          "error"
-        ]
-      },
-      "PushToken": {
-        "description": "PushToken in JWT format, self-signed. \n",
-        "properties": {
-          "aud": {
-            "description": "audience (URI)",
-            "type": "string"
-          },
-          "exp": {
-            "type": "integer"
-          },
-          "iat": {
-            "type": "integer"
-          },
-          "iss": {
-            "description": "issuer (URI)",
-            "type": "string"
-          },
-          "nbf": {
-            "type": "integer"
-          },
-          "sub": {
-            "description": "UUID and public signing key",
-            "type": "string"
-          }
-        },
-        "required": [
-          "sub",
-          "iss",
-          "aud"
-        ]
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/main/resources/abstractapi.com-geolocation-1.0.0.json b/src/main/resources/abstractapi.com-geolocation-1.0.0.json
deleted file mode 100644
index 48bc4de4321744b85ff9853799c4c27c31bd611a..0000000000000000000000000000000000000000
--- a/src/main/resources/abstractapi.com-geolocation-1.0.0.json
+++ /dev/null
@@ -1,233 +0,0 @@
-{
-  "openapi": "3.0.1",
-  "servers": [
-    {
-      "url": "https://ipgeolocation.abstractapi.com"
-    }
-  ],
-  "info": {
-    "description": "Abstract IP geolocation API allows developers to retrieve the region, country and city behind any IP worldwide. The API covers the geolocation of IPv4 and IPv6 addresses in 180+ countries worldwide. Extra information can be retrieved like the currency, flag or language associated to an IP.",
-    "title": "IP geolocation API",
-    "version": "1.0.0",
-    "x-apisguru-categories": [
-      "location"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_global-uploads.webflow.com_5ebbd0a566a3996636e55959_5ec2ba29feeeb05d69160e7b_webclip.png"
-    },
-    "x-origin": [
-      {
-        "format": "openapi",
-        "url": "https://documentation.abstractapi.com/ip-geolocation-openapi.json",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "abstractapi.com",
-    "x-serviceName": "geolocation"
-  },
-  "externalDocs": {
-    "description": "API Documentation",
-    "url": "https://www.abstractapi.com/ip-geolocation-api#docs"
-  },
-  "paths": {
-    "/v1": {
-      "get": {
-        "description": "Retrieve the location of an IP address",
-        "parameters": [
-          {
-            "explode": true,
-            "in": "query",
-            "name": "api_key",
-            "required": true,
-            "schema": {
-              "type": "string"
-            },
-            "style": "form"
-          },
-          {
-            "explode": true,
-            "in": "query",
-            "name": "ip_address",
-            "required": false,
-            "schema": {
-              "example": "195.154.25.40",
-              "type": "string"
-            },
-            "style": "form"
-          },
-          {
-            "explode": true,
-            "in": "query",
-            "name": "fields",
-            "required": false,
-            "schema": {
-              "example": "country,city,timezone",
-              "type": "string"
-            },
-            "style": "form"
-          }
-        ],
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "examples": {
-                  "0": {
-                    "value": "{\"ip_address\":\"195.154.25.40\",\"city\":\"Paris\",\"city_geoname_id\":2988507,\"region\":\"Île-de-France\",\"region_iso_code\":\"IDF\",\"region_geoname_id\":3012874,\"postal_code\":\"75008\",\"country\":\"France\",\"country_code\":\"FR\",\"country_geoname_id\":3017382,\"country_is_eu\":true,\"continent\":\"Europe\",\"continent_code\":\"EU\",\"continent_geoname_id\":6255148,\"longitude\":2.4075,\"latitude\":48.8323,\"security\":{\"is_vpn\":false},\"timezone\":{\"name\":\"Europe/Paris\",\"abbreviation\":\"CEST\",\"gmt_offset\":2,\"current_time\":\"15:42:18\",\"is_dst\":true},\"flag\":{\"emoji\":\"<ë<÷\",\"unicode\":\"U+1F1EB U+1F1F7\",\"png\":\"https://static.abstractapi.com/country-flags/FR_flag.png\",\"svg\":\"https://static.abstractapi.com/country-flags/FR_flag.svg\"},\"currency\":{\"currency_name\":\"Euros\",\"currency_code\":\"EUR\"},\"connection\":{\"autonomous_system_number\":12876,\"autonomous_system_organization\":\"Online S.a.s.\",\"connection_type\":\"Corporate\",\"isp_name\":\"Online S.A.S.\",\"organization_name\":\"ONLINE\"}}"
-                  }
-                },
-                "schema": {
-                  "$ref": "#/components/schemas/inline_response_200"
-                }
-              }
-            },
-            "description": "Location of geolocated IP"
-          }
-        },
-        "servers": [
-          {
-            "url": "https://ipgeolocation.abstractapi.com"
-          }
-        ]
-      },
-      "servers": [
-        {
-          "url": "https://ipgeolocation.abstractapi.com"
-        }
-      ]
-    }
-  },
-  "components": {
-    "schemas": {
-      "inline_response_200": {
-        "properties": {
-          "city": {
-            "type": "string"
-          },
-          "city_geoname_id": {
-            "type": "integer"
-          },
-          "connection": {
-            "properties": {
-              "autonomous_system_number": {
-                "type": "integer"
-              },
-              "autonomous_system_organization": {
-                "type": "string"
-              },
-              "connection_type": {
-                "type": "string"
-              },
-              "isp_name": {
-                "type": "string"
-              },
-              "organization_name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "continent": {
-            "type": "string"
-          },
-          "continent_code": {
-            "type": "string"
-          },
-          "continent_geoname_id": {
-            "type": "integer"
-          },
-          "country": {
-            "type": "string"
-          },
-          "country_code": {
-            "type": "string"
-          },
-          "country_geoname_id": {
-            "type": "integer"
-          },
-          "country_is_eu": {
-            "type": "boolean"
-          },
-          "currency": {
-            "properties": {
-              "currency_code": {
-                "type": "string"
-              },
-              "currency_name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "flag": {
-            "properties": {
-              "emoji": {
-                "type": "string"
-              },
-              "png": {
-                "type": "string"
-              },
-              "svg": {
-                "type": "string"
-              },
-              "unicode": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          },
-          "ip_address": {
-            "type": "string"
-          },
-          "latitude": {
-            "type": "number"
-          },
-          "longitude": {
-            "type": "number"
-          },
-          "postal_code": {
-            "type": "string"
-          },
-          "region": {
-            "type": "string"
-          },
-          "region_geoname_id": {
-            "type": "integer"
-          },
-          "region_iso_code": {
-            "type": "string"
-          },
-          "security": {
-            "properties": {
-              "is_vpn": {
-                "type": "boolean"
-              }
-            },
-            "type": "object"
-          },
-          "timezone": {
-            "properties": {
-              "abbreviation": {
-                "type": "string"
-              },
-              "current_time": {
-                "type": "string"
-              },
-              "gmt_offset": {
-                "type": "integer"
-              },
-              "is_dst": {
-                "type": "boolean"
-              },
-              "name": {
-                "type": "string"
-              }
-            },
-            "type": "object"
-          }
-        },
-        "type": "object"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/main/resources/adyen.com-CheckoutUtilityService-1.json b/src/main/resources/adyen.com-CheckoutUtilityService-1.json
deleted file mode 100644
index f673d45542efe72d5058d08761681bc4899eb2e1..0000000000000000000000000000000000000000
--- a/src/main/resources/adyen.com-CheckoutUtilityService-1.json
+++ /dev/null
@@ -1,117 +0,0 @@
-{
-  "openapi": "3.0.0",
-  "servers": [
-    {
-      "url": "https://checkout-test.adyen.com/v1"
-    }
-  ],
-  "info": {
-    "contact": {
-      "email": "support@adyen.com",
-      "name": "Adyen Support",
-      "url": "https://support.adyen.com/",
-      "x-twitter": "Adyen"
-    },
-    "description": "A web service containing utility functions available for merchants integrating with Checkout APIs.\n## Authentication\nEach request to the Checkout Utility API must be signed with an API key. For this, obtain an API Key from your Customer Area, as described in [How to get the Checkout API key](https://docs.adyen.com/developers/user-management/how-to-get-the-checkout-api-key). Then set this key to the `X-API-Key` header value, for example:\n\n```\ncurl\n-H \"Content-Type: application/json\" \\\n-H \"X-API-Key: Your_Checkout_API_key\" \\\n...\n```\nNote that when going live, you need to generate a new API Key to access the [live endpoints](https://docs.adyen.com/developers/api-reference/live-endpoints).\n\n## Versioning\nCheckout API supports versioning of its endpoints through a version suffix in the endpoint URL. This suffix has the following format: \"vXX\", where XX is the version number.\n\nFor example:\n```\nhttps://checkout-test.adyen.com/v1/originKeys\n```",
-    "termsOfService": "https://docs.adyen.com/legal/terms-conditions",
-    "title": "Adyen Checkout Utility Service",
-    "version": "1",
-    "x-apisguru-categories": [
-      "payment"
-    ],
-    "x-logo": {
-      "url": "https://api.apis.guru/v2/cache/logo/https_twitter.com_Adyen_profile_image.jpeg"
-    },
-    "x-origin": [
-      {
-        "converter": {
-          "url": "https://github.com/lucybot/api-spec-converter",
-          "version": "2.7.11"
-        },
-        "format": "openapi",
-        "url": "https://raw.githubusercontent.com/adyen/adyen-openapi/master/specs/3.0/CheckoutUtilityService-v1.json",
-        "version": "3.0"
-      }
-    ],
-    "x-providerName": "adyen.com",
-    "x-serviceName": "CheckoutUtilityService"
-  },
-  "paths": {
-    "/originKeys": {
-      "post": {
-        "description": "This operation takes the origin domains and returns a JSON object containing the corresponding origin keys for the domains.",
-        "requestBody": {
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/CheckoutUtilityRequest"
-              }
-            }
-          }
-        },
-        "responses": {
-          "200": {
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/CheckoutUtilityResponse"
-                }
-              }
-            },
-            "description": "OK - the request has succeeded."
-          },
-          "400": {
-            "description": "Bad Request - a problem reading or understanding the request."
-          },
-          "401": {
-            "description": "Unauthorized - authentication required."
-          },
-          "403": {
-            "description": "Forbidden - insufficient permissions to process the request."
-          },
-          "422": {
-            "description": "Unprocessable Entity - a request validation error."
-          },
-          "500": {
-            "description": "Internal Server Error - the server could not process the request."
-          }
-        },
-        "summary": "Create originKey values for one or more merchant domains.",
-        "x-groupName": "General",
-        "x-sortIndex": 0
-      }
-    }
-  },
-  "components": {
-    "schemas": {
-      "CheckoutUtilityRequest": {
-        "properties": {
-          "originDomains": {
-            "description": "The list of origin domains, for which origin keys are requested.",
-            "items": {
-              "type": "string"
-            },
-            "type": "array"
-          }
-        },
-        "required": [
-          "originDomains"
-        ]
-      },
-      "CheckoutUtilityResponse": {
-        "properties": {
-          "originKeys": {
-            "additionalProperties": {
-              "type": "string"
-            },
-            "description": "The list of origin keys for all requested domains. For each list item, the key is the domain and the value is the origin key.",
-            "type": "object"
-          }
-        }
-      }
-    }
-  },
-  "x-groups": [
-    "General"
-  ]
-}
\ No newline at end of file
diff --git a/src/test/java/openapi/OpenAPIMain_test.java b/src/test/java/openapi/OpenAPIMain_test.java
index 88b33091df26b5b970fc1be6e049dd45c7f258db..786273e0563b4da97fcae25ecfcd077263a11da8 100644
--- a/src/test/java/openapi/OpenAPIMain_test.java
+++ b/src/test/java/openapi/OpenAPIMain_test.java
@@ -26,6 +26,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import org.junit.jupiter.api.Test;
 import org.opentest4j.TestAbortedException;
@@ -68,6 +69,8 @@ public class OpenAPIMain_test {
 
             // openAPI object is integrated in JastAdd grammar
             openApi = OpenAPIObject.parseOpenAPI(api);
+            Set<SchemaTuple> s = openApi.schemaTuples();
+            System.out.println(s.size());
 
             // composed openAPI object, it is expected to be equivalent to parsed source object
             api3 = OpenAPIObject.composeOpenAPI(openApi);