.<= public static void art.Trace.enableTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
<= public static void art.Trace.enableMethodTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
..<= static int art.Test988.iter_fibonacci(int) -> <class java.lang.Integer: 832040>
.<= public int art.Test988$IterOp.applyAsInt(int) -> <class java.lang.Integer: 832040>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(30)=832040
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 3>
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....=> static int art.Test988.fibonacci(int)
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
..<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 5>
.<= public int art.Test988$RecurOp.applyAsInt(int) -> <class java.lang.Integer: 5>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(5)=5
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$NativeOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$NativeOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$NativeOp.applyAsInt(int)
..=> static int art.Test988.nativeFibonacci(int)
..<= static int art.Test988.nativeFibonacci(int) -> <class java.lang.Integer: 5>
.<= public int art.Test988$NativeOp.applyAsInt(int) -> <class java.lang.Integer: 5>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(5)=5
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.getBytes(byte[],int,byte)
.......=> byte java.lang.String.coder()
.......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.getBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 3>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static byte[] java.util.Arrays.copyOf(byte[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static byte[] java.util.Arrays.copyOf(byte[],int) -> <class [B: [66, 97, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 58, 32, 45, 49, 57, 32, 60, 32, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
.....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
.....=> static int java.lang.Integer.getChars(int,int,byte[])
.....<= static int java.lang.Integer.getChars(int,int,byte[]) -> <class java.lang.Integer: 14>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.getBytes(byte[],int,byte)
.......=> byte java.lang.String.coder()
.......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.getBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
....=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
.....=> public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int)
.....<= public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:280)
	art.Test988$IterOp.applyAsInt(Test988.java:275)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:369)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.iter_fibonacci(int) EXCEPTION
.<= public int art.Test988$IterOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:280)
	art.Test988$IterOp.applyAsInt(Test988.java:275)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:369)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.getBytes(byte[],int,byte)
.......=> byte java.lang.String.coder()
.......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.getBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 3>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static byte[] java.util.Arrays.copyOf(byte[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static byte[] java.util.Arrays.copyOf(byte[],int) -> <class [B: [66, 97, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 58, 32, 45, 49, 57, 32, 60, 32, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
.....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
.....=> static int java.lang.Integer.getChars(int,int,byte[])
.....<= static int java.lang.Integer.getChars(int,int,byte[]) -> <class java.lang.Integer: 14>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.getBytes(byte[],int,byte)
.......=> byte java.lang.String.coder()
.......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.getBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
....=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
.....=> public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int)
.....<= public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:302)
	art.Test988$RecurOp.applyAsInt(Test988.java:297)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:370)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.fibonacci(int) EXCEPTION
.<= public int art.Test988$RecurOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:302)
	art.Test988$RecurOp.applyAsInt(Test988.java:297)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:370)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$NativeOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$NativeOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$NativeOp.applyAsInt(int)
..=> static int art.Test988.nativeFibonacci(int)
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: bad argument
	art.Test988.nativeFibonacci(Native Method)
	art.Test988$NativeOp.applyAsInt(Test988.java:312)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:371)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.nativeFibonacci(int) EXCEPTION
.<= public int art.Test988$NativeOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: bad argument
	art.Test988.nativeFibonacci(Native Method)
	art.Test988$NativeOp.applyAsInt(Test988.java:312)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:371)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> public final void <non-deterministic-type 0>.run()
.=> private static java.lang.Object java.lang.reflect.Proxy.invoke(java.lang.reflect.Proxy,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable
..=> public java.lang.Object art.Test988$TestRunnableInvokeHandler.invoke(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable
..<= public java.lang.Object art.Test988$TestRunnableInvokeHandler.invoke(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable -> <null: null>
.<= private static java.lang.Object java.lang.reflect.Proxy.invoke(java.lang.reflect.Proxy,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable -> <null: null>
<= public final void <non-deterministic-type 0>.run() -> <null: null>
=> static void art.Test988$IntrinsicsTest.doTest()
.=> static void art.Test988Intrinsics.test()
..=> public static long java.lang.Double.doubleToRawLongBits(double)
..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
..=> public static long java.lang.Double.doubleToLongBits(double)
..<= public static long java.lang.Double.doubleToLongBits(double) -> <class java.lang.Long: 0>
..=> public static boolean java.lang.Double.isInfinite(double)
..<= public static boolean java.lang.Double.isInfinite(double) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Double.isNaN(double)
..<= public static boolean java.lang.Double.isNaN(double) -> <class java.lang.Boolean: false>
..=> public static double java.lang.Double.longBitsToDouble(long)
..<= public static double java.lang.Double.longBitsToDouble(long) -> <class java.lang.Double: 0.0>
..=> public static int java.lang.Float.floatToRawIntBits(float)
..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Float.floatToIntBits(float)
..<= public static int java.lang.Float.floatToIntBits(float) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Float.isInfinite(float)
..<= public static boolean java.lang.Float.isInfinite(float) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Float.isNaN(float)
..<= public static boolean java.lang.Float.isNaN(float) -> <class java.lang.Boolean: false>
..=> public static float java.lang.Float.intBitsToFloat(int)
..<= public static float java.lang.Float.intBitsToFloat(int) -> <class java.lang.Float: 0.0>
..=> public static int java.lang.Integer.reverse(int)
..<= public static int java.lang.Integer.reverse(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.reverseBytes(int)
..<= public static int java.lang.Integer.reverseBytes(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.bitCount(int)
..<= public static int java.lang.Integer.bitCount(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.compare(int,int)
..<= public static int java.lang.Integer.compare(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.highestOneBit(int)
..<= public static int java.lang.Integer.highestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.lowestOneBit(int)
..<= public static int java.lang.Integer.lowestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.numberOfLeadingZeros(int)
..<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.numberOfTrailingZeros(int)
..<= public static int java.lang.Integer.numberOfTrailingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.rotateRight(int,int)
..<= public static int java.lang.Integer.rotateRight(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.rotateLeft(int,int)
..<= public static int java.lang.Integer.rotateLeft(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.signum(int)
..<= public static int java.lang.Integer.signum(int) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.reverse(long)
..<= public static long java.lang.Long.reverse(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.reverseBytes(long)
..<= public static long java.lang.Long.reverseBytes(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.bitCount(long)
..<= public static int java.lang.Long.bitCount(long) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Long.compare(long,long)
..<= public static int java.lang.Long.compare(long,long) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.highestOneBit(long)
..<= public static long java.lang.Long.highestOneBit(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.lowestOneBit(long)
..<= public static long java.lang.Long.lowestOneBit(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.numberOfLeadingZeros(long)
..<= public static int java.lang.Long.numberOfLeadingZeros(long) -> <class java.lang.Integer: 64>
..=> public static int java.lang.Long.numberOfTrailingZeros(long)
..<= public static int java.lang.Long.numberOfTrailingZeros(long) -> <class java.lang.Integer: 64>
..=> public static long java.lang.Long.rotateRight(long,int)
..<= public static long java.lang.Long.rotateRight(long,int) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.rotateLeft(long,int)
..<= public static long java.lang.Long.rotateLeft(long,int) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.signum(long)
..<= public static int java.lang.Long.signum(long) -> <class java.lang.Integer: 0>
..=> public static short java.lang.Short.reverseBytes(short)
..<= public static short java.lang.Short.reverseBytes(short) -> <class java.lang.Short: 0>
..=> public static double java.lang.Math.abs(double)
..<= public static double java.lang.Math.abs(double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.abs(float)
..<= public static float java.lang.Math.abs(float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.abs(long)
..<= public static long java.lang.Math.abs(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.abs(int)
..<= public static int java.lang.Math.abs(int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.min(double,double)
..<= public static double java.lang.Math.min(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.min(float,float)
..<= public static float java.lang.Math.min(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.min(long,long)
..<= public static long java.lang.Math.min(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.min(int,int)
..<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.max(double,double)
..<= public static double java.lang.Math.max(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.max(float,float)
..<= public static float java.lang.Math.max(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.max(long,long)
..<= public static long java.lang.Math.max(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.max(int,int)
..<= public static int java.lang.Math.max(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.cos(double)
..<= public static double java.lang.Math.cos(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.sin(double)
..<= public static double java.lang.Math.sin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.acos(double)
..<= public static double java.lang.Math.acos(double) -> <class java.lang.Double: 1.5707963267948966>
..=> public static double java.lang.Math.asin(double)
..<= public static double java.lang.Math.asin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan(double)
..<= public static double java.lang.Math.atan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan2(double,double)
..<= public static double java.lang.Math.atan2(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cbrt(double)
..<= public static double java.lang.Math.cbrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cosh(double)
..<= public static double java.lang.Math.cosh(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.exp(double)
..<= public static double java.lang.Math.exp(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.expm1(double)
..<= public static double java.lang.Math.expm1(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.hypot(double,double)
..<= public static double java.lang.Math.hypot(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.log(double)
..<= public static double java.lang.Math.log(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.log10(double)
..<= public static double java.lang.Math.log10(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.nextAfter(double,double)
..<= public static double java.lang.Math.nextAfter(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sinh(double)
..<= public static double java.lang.Math.sinh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tan(double)
..<= public static double java.lang.Math.tan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tanh(double)
..<= public static double java.lang.Math.tanh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sqrt(double)
..<= public static double java.lang.Math.sqrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.ceil(double)
..<= public static double java.lang.Math.ceil(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.floor(double)
..<= public static double java.lang.Math.floor(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.rint(double)
..<= public static double java.lang.Math.rint(double) -> <class java.lang.Double: 0.0>
..=> public static long java.lang.Math.round(double)
..<= public static long java.lang.Math.round(double) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.round(float)
..<= public static int java.lang.Math.round(float) -> <class java.lang.Integer: 0>
..=> public static java.lang.Thread java.lang.Thread.currentThread()
..<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
..=> public char java.lang.String.charAt(int)
..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
..=> public int java.lang.String.compareTo(java.lang.String)
..<= public int java.lang.String.compareTo(java.lang.String) -> <class java.lang.Integer: 11>
..=> public boolean java.lang.String.equals(java.lang.Object)
..<= public boolean java.lang.String.equals(java.lang.Object) -> <class java.lang.Boolean: false>
..=> public int java.lang.String.indexOf(int)
..<= public int java.lang.String.indexOf(int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(int,int)
..<= public int java.lang.String.indexOf(int,int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String)
..<= public int java.lang.String.indexOf(java.lang.String) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String,int)
..<= public int java.lang.String.indexOf(java.lang.String,int) -> <class java.lang.Integer: -1>
..=> public boolean java.lang.String.isEmpty()
..<= public boolean java.lang.String.isEmpty() -> <class java.lang.Boolean: false>
..=> public int java.lang.String.length()
..<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
..=> public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String)
..<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhello>
..=> public synchronized int java.lang.StringBuffer.length()
..<= public synchronized int java.lang.StringBuffer.length() -> <class java.lang.Integer: 29>
..=> public synchronized java.lang.String java.lang.StringBuffer.toString()
..<= public synchronized java.lang.String java.lang.StringBuffer.toString() -> <class java.lang.String: some large string bufferhello>
..=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
..<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhello>
..=> public int java.lang.StringBuilder.length()
..<= public int java.lang.StringBuilder.length() -> <class java.lang.Integer: 30>
..=> public java.lang.String java.lang.StringBuilder.toString()
..<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: some large string builderhello>
..=> public static java.lang.Integer java.lang.Integer.valueOf(int)
..<= public static java.lang.Integer java.lang.Integer.valueOf(int) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Thread.interrupted()
..<= public static boolean java.lang.Thread.interrupted() -> <class java.lang.Boolean: false>
.<= static void art.Test988Intrinsics.test() -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
<= static void art.Test988$IntrinsicsTest.doTest() -> <null: null>
=> public static java.lang.Thread java.lang.Thread.currentThread()
<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
=> public static void art.Trace.disableTracing(java.lang.Thread)
