import kotlin.time.ExperimentalTime
import kotlin.time.measureTime

enum class MathOperator {
    Plus,
    Minus,
    Multiply,
    Divide
}

class Day21 {
    data class Monkey(val name: String, var value: Long?, val left: String?, val right: String?, val op: MathOperator?)

    fun parseOperator(value: String): MathOperator {
        return when (value) {
            "*" -> MathOperator.Multiply
            "+" -> MathOperator.Plus
            "-" -> MathOperator.Minus
            "/" -> MathOperator.Divide
            else -> throw RuntimeException("Unknown op $value")
        }
    }

    fun parse(input: List<String>): List<Monkey> {
        return input.map { line ->
            val parts = line.split(' ')
            if (parts.size == 4) {
                Monkey(parts[0], null, parts[1], parts[3], parseOperator(parts[2]))
            } else {
                Monkey(parts[0], parts[1].toLong(), null, null, null)
            }
        }
    }

    fun calc1(name: String, map: Map<String, Monkey>): Long {
        val monkey = map.getValue(name)
        if (monkey.value != null) {
            return monkey.value!!
        }

        val left = calc1(monkey.left!!, map)
        val right = calc1(monkey.right!!, map)
        val result = when (monkey.op!!) {
            MathOperator.Plus -> left + right
            MathOperator.Minus -> left - right
            MathOperator.Multiply -> left * right
            MathOperator.Divide -> left / right
        }

        monkey.value = result

        return result
    }

    fun calc2(name: String, map: Map<String, Monkey>): Long {
        val monkey = map.getValue(name)
        if (monkey.value != null) {
            return monkey.value!!
        }

        val left = calc2(monkey.left!!, map)
        val right = calc2(monkey.right!!, map)
        if (monkey.name == "root") {
            return right - left
        }

        val result = when (monkey.op!!) {
            MathOperator.Plus -> left + right
            MathOperator.Minus -> left - right
            MathOperator.Multiply -> left * right
            MathOperator.Divide -> left / right
        }

        monkey.value = result

        return result
    }

    fun part1(input: List<String>): String {
        val monkeys = parse(input)
        val monkeyMap = monkeys.associateBy { it.name }
        val result = calc1("root", monkeyMap)

        return result.toString()
    }

    fun part2(input: List<String>): String {
        var r = 5000000000000L
        var l = 0L
        while (r - l > 1) {
            val h = (r + l) / 2
            val monkeys = parse(input)
            val monkeyMap = monkeys.associateBy { it.name }
            monkeyMap["humn"]!!.value = h
            val result = calc2("root", monkeyMap)
            if (result != 0L) {
                if (result < 0) {
                    l = h
                } else {
                    r = h
                }

                continue
            }

            return h.toString()
        }

        return "Not Found"
    }
}

@OptIn(ExperimentalTime::class)
@Suppress("DuplicatedCode")
fun main() {
    val solution = Day21()
    val name = solution.javaClass.name

    val execution = setOf(
        ExecutionMode.Test1,
        ExecutionMode.Test2,
        ExecutionMode.Exec1,
        ExecutionMode.Exec2
    )

    fun test() {
        val expected1 = "152"
        val expected2 = "301"

        val testInput = readInput("${name}_test")
        if (execution.contains(ExecutionMode.Test1)) {
            println("Test part 1")
            assert(solution.part1(testInput), expected1)
            println("> Passed")
        }
        if (execution.contains(ExecutionMode.Test2)) {
            println("Test part 2")
            assert(solution.part2(testInput), expected2)
            println("> Passed")
            println()
        }
        println("=================================")
        println()
    }

    fun run() {
        val input = readInput(name)
        if (execution.contains(ExecutionMode.Exec1)) {
            val elapsed1 = measureTime {
                println("Part 1: " + solution.part1(input))
            }
            println("Elapsed: $elapsed1")
            println()
        }

        if (execution.contains(ExecutionMode.Exec2)) {
            val elapsed2 = measureTime {
                println("Part 2: " + solution.part2(input))
            }
            println("Elapsed: $elapsed2")
            println()
        }
    }

    test()
    run()
}

Compiled from "Day21.kt"
public final class Day21Kt {
  public static final void main();
    Code:
       0: new           #8                  // class Day21
       3: dup
       4: invokespecial #11                 // Method Day21."<init>":()V
       7: astore_0
       8: aload_0
       9: invokevirtual #15                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      12: invokevirtual #21                 // Method java/lang/Class.getName:()Ljava/lang/String;
      15: astore_1
      16: iconst_4
      17: anewarray     #23                 // class ExecutionMode
      20: astore_3
      21: aload_3
      22: iconst_0
      23: getstatic     #27                 // Field ExecutionMode.Test1:LExecutionMode;
      26: aastore
      27: aload_3
      28: iconst_1
      29: getstatic     #30                 // Field ExecutionMode.Test2:LExecutionMode;
      32: aastore
      33: aload_3
      34: iconst_2
      35: getstatic     #33                 // Field ExecutionMode.Exec1:LExecutionMode;
      38: aastore
      39: aload_3
      40: iconst_3
      41: getstatic     #36                 // Field ExecutionMode.Exec2:LExecutionMode;
      44: aastore
      45: aload_3
      46: invokestatic  #42                 // Method kotlin/collections/SetsKt.setOf:([Ljava/lang/Object;)Ljava/util/Set;
      49: astore_2
      50: aload_1
      51: aload_2
      52: aload_0
      53: invokestatic  #46                 // Method main$test:(Ljava/lang/String;Ljava/util/Set;LDay21;)V
      56: aload_1
      57: aload_2
      58: aload_0
      59: invokestatic  #49                 // Method main$run:(Ljava/lang/String;Ljava/util/Set;LDay21;)V
      62: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #58                 // Method main:()V
       3: return

  private static final void main$test(java.lang.String, java.util.Set<? extends ExecutionMode>, Day21);
    Code:
       0: ldc           #63                 // String 152
       2: astore_3
       3: ldc           #65                 // String 301
       5: astore        4
       7: new           #67                 // class java/lang/StringBuilder
      10: dup
      11: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      14: aload_0
      15: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      18: ldc           #74                 // String _test
      20: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      23: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      26: invokestatic  #83                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
      29: astore        5
      31: aload_1
      32: getstatic     #27                 // Field ExecutionMode.Test1:LExecutionMode;
      35: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      40: ifeq          71
      43: ldc           #91                 // String Test part 1
      45: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      48: swap
      49: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      52: aload_2
      53: aload         5
      55: invokevirtual #107                // Method Day21.part1:(Ljava/util/List;)Ljava/lang/String;
      58: aload_3
      59: invokestatic  #111                // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
      62: ldc           #113                // String > Passed
      64: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      67: swap
      68: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      71: aload_1
      72: getstatic     #30                 // Field ExecutionMode.Test2:LExecutionMode;
      75: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      80: ifeq          118
      83: ldc           #115                // String Test part 2
      85: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      88: swap
      89: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      92: aload_2
      93: aload         5
      95: invokevirtual #118                // Method Day21.part2:(Ljava/util/List;)Ljava/lang/String;
      98: aload         4
     100: invokestatic  #111                // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
     103: ldc           #113                // String > Passed
     105: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     108: swap
     109: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     112: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     115: invokevirtual #120                // Method java/io/PrintStream.println:()V
     118: ldc           #122                // String =================================
     120: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     123: swap
     124: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     127: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     130: invokevirtual #120                // Method java/io/PrintStream.println:()V
     133: return

  private static final void main$run(java.lang.String, java.util.Set<? extends ExecutionMode>, Day21);
    Code:
       0: aload_0
       1: invokestatic  #135                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
       4: aload_0
       5: invokestatic  #83                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
       8: astore_3
       9: aload_1
      10: getstatic     #33                 // Field ExecutionMode.Exec1:LExecutionMode;
      13: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      18: ifeq          118
      21: iconst_0
      22: istore        6
      24: getstatic     #141                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
      27: astore        7
      29: iconst_0
      30: istore        8
      32: aload         7
      34: invokevirtual #145                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
      37: lstore        9
      39: iconst_0
      40: istore        11
      42: new           #67                 // class java/lang/StringBuilder
      45: dup
      46: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      49: ldc           #147                // String Part 1:
      51: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      54: aload_2
      55: aload_3
      56: invokevirtual #107                // Method Day21.part1:(Ljava/util/List;)Ljava/lang/String;
      59: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      62: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      65: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      68: swap
      69: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      72: nop
      73: nop
      74: lload         9
      76: invokestatic  #153                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
      79: nop
      80: lstore        4
      82: new           #67                 // class java/lang/StringBuilder
      85: dup
      86: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      89: ldc           #155                // String Elapsed:
      91: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      94: lload         4
      96: invokestatic  #161                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
      99: invokevirtual #164                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     102: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     105: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     108: swap
     109: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     112: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     115: invokevirtual #120                // Method java/io/PrintStream.println:()V
     118: aload_1
     119: getstatic     #36                 // Field ExecutionMode.Exec2:LExecutionMode;
     122: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     127: ifeq          227
     130: iconst_0
     131: istore        6
     133: getstatic     #141                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
     136: astore        7
     138: iconst_0
     139: istore        8
     141: aload         7
     143: invokevirtual #145                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
     146: lstore        9
     148: iconst_0
     149: istore        11
     151: new           #67                 // class java/lang/StringBuilder
     154: dup
     155: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     158: ldc           #166                // String Part 2:
     160: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     163: aload_2
     164: aload_3
     165: invokevirtual #118                // Method Day21.part2:(Ljava/util/List;)Ljava/lang/String;
     168: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     171: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     174: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     177: swap
     178: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     181: nop
     182: nop
     183: lload         9
     185: invokestatic  #153                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
     188: nop
     189: lstore        4
     191: new           #67                 // class java/lang/StringBuilder
     194: dup
     195: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     198: ldc           #155                // String Elapsed:
     200: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     203: lload         4
     205: invokestatic  #161                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
     208: invokevirtual #164                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     211: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     214: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     217: swap
     218: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     221: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     224: invokevirtual #120                // Method java/io/PrintStream.println:()V
     227: return
}

Compiled from "Day21.kt"
public final class Day21$WhenMappings {
  public static final int[] $EnumSwitchMapping$0;

  static {};
    Code:
       0: invokestatic  #14                 // Method MathOperator.values:()[LMathOperator;
       3: arraylength
       4: newarray       int
       6: astore_0
       7: nop
       8: aload_0
       9: getstatic     #18                 // Field MathOperator.Plus:LMathOperator;
      12: invokevirtual #22                 // Method MathOperator.ordinal:()I
      15: iconst_1
      16: iastore
      17: goto          21
      20: astore_1
      21: nop
      22: aload_0
      23: getstatic     #25                 // Field MathOperator.Minus:LMathOperator;
      26: invokevirtual #22                 // Method MathOperator.ordinal:()I
      29: iconst_2
      30: iastore
      31: goto          35
      34: astore_1
      35: nop
      36: aload_0
      37: getstatic     #28                 // Field MathOperator.Multiply:LMathOperator;
      40: invokevirtual #22                 // Method MathOperator.ordinal:()I
      43: iconst_3
      44: iastore
      45: goto          49
      48: astore_1
      49: nop
      50: aload_0
      51: getstatic     #31                 // Field MathOperator.Divide:LMathOperator;
      54: invokevirtual #22                 // Method MathOperator.ordinal:()I
      57: iconst_4
      58: iastore
      59: goto          63
      62: astore_1
      63: aload_0
      64: putstatic     #35                 // Field $EnumSwitchMapping$0:[I
      67: return
    Exception table:
       from    to  target type
           7    17    20   Class java/lang/NoSuchFieldError
          21    31    34   Class java/lang/NoSuchFieldError
          35    45    48   Class java/lang/NoSuchFieldError
          49    59    62   Class java/lang/NoSuchFieldError
}

Compiled from "Day21.kt"
public final class Day21 {
  public Day21();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final MathOperator parseOperator(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String value
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: astore_2
       8: aload_2
       9: invokevirtual #27                 // Method java/lang/String.hashCode:()I
      12: tableswitch   { // 42 to 47
                    42: 52
                    43: 64
                    44: 124
                    45: 76
                    46: 124
                    47: 88
               default: 124
          }
      52: aload_2
      53: ldc           #29                 // String *
      55: invokevirtual #33                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
      58: ifne          100
      61: goto          124
      64: aload_2
      65: ldc           #35                 // String +
      67: invokevirtual #33                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
      70: ifne          106
      73: goto          124
      76: aload_2
      77: ldc           #37                 // String -
      79: invokevirtual #33                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
      82: ifne          112
      85: goto          124
      88: aload_2
      89: ldc           #39                 // String /
      91: invokevirtual #33                 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
      94: ifne          118
      97: goto          124
     100: getstatic     #45                 // Field MathOperator.Multiply:LMathOperator;
     103: goto          151
     106: getstatic     #48                 // Field MathOperator.Plus:LMathOperator;
     109: goto          151
     112: getstatic     #51                 // Field MathOperator.Minus:LMathOperator;
     115: goto          151
     118: getstatic     #54                 // Field MathOperator.Divide:LMathOperator;
     121: goto          151
     124: new           #56                 // class java/lang/RuntimeException
     127: dup
     128: new           #58                 // class java/lang/StringBuilder
     131: dup
     132: invokespecial #59                 // Method java/lang/StringBuilder."<init>":()V
     135: ldc           #61                 // String Unknown op
     137: invokevirtual #65                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     140: aload_1
     141: invokevirtual #65                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     144: invokevirtual #69                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     147: invokespecial #72                 // Method java/lang/RuntimeException."<init>":(Ljava/lang/String;)V
     150: athrow
     151: areturn

  public final java.util.List<Day21$Monkey> parse(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #78                 // String input
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #80                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: astore        4
      16: new           #82                 // class java/util/ArrayList
      19: dup
      20: aload_2
      21: bipush        10
      23: invokestatic  #88                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      26: invokespecial #91                 // Method java/util/ArrayList."<init>":(I)V
      29: checkcast     #93                 // class java/util/Collection
      32: astore        5
      34: iconst_0
      35: istore        6
      37: aload         4
      39: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      44: astore        7
      46: aload         7
      48: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      53: ifeq          228
      56: aload         7
      58: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      63: astore        8
      65: aload         5
      67: aload         8
      69: checkcast     #23                 // class java/lang/String
      72: astore        9
      74: astore        13
      76: iconst_0
      77: istore        10
      79: aload         9
      81: checkcast     #109                // class java/lang/CharSequence
      84: iconst_1
      85: newarray       char
      87: astore        11
      89: aload         11
      91: iconst_0
      92: bipush        32
      94: castore
      95: aload         11
      97: iconst_0
      98: iconst_0
      99: bipush        6
     101: aconst_null
     102: invokestatic  #115                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List;
     105: astore        12
     107: aload         12
     109: invokeinterface #120,  1          // InterfaceMethod java/util/List.size:()I
     114: iconst_4
     115: if_icmpne     177
     118: new           #122                // class Day21$Monkey
     121: dup
     122: aload         12
     124: iconst_0
     125: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     130: checkcast     #23                 // class java/lang/String
     133: aconst_null
     134: aload         12
     136: iconst_1
     137: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     142: checkcast     #23                 // class java/lang/String
     145: aload         12
     147: iconst_3
     148: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     153: checkcast     #23                 // class java/lang/String
     156: aload_0
     157: aload         12
     159: iconst_2
     160: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     165: checkcast     #23                 // class java/lang/String
     168: invokevirtual #128                // Method parseOperator:(Ljava/lang/String;)LMathOperator;
     171: invokespecial #131                // Method Day21$Monkey."<init>":(Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;LMathOperator;)V
     174: goto          215
     177: new           #122                // class Day21$Monkey
     180: dup
     181: aload         12
     183: iconst_0
     184: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     189: checkcast     #23                 // class java/lang/String
     192: aload         12
     194: iconst_1
     195: invokeinterface #126,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     200: checkcast     #23                 // class java/lang/String
     203: invokestatic  #137                // Method java/lang/Long.parseLong:(Ljava/lang/String;)J
     206: invokestatic  #141                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     209: aconst_null
     210: aconst_null
     211: aconst_null
     212: invokespecial #131                // Method Day21$Monkey."<init>":(Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;LMathOperator;)V
     215: nop
     216: aload         13
     218: swap
     219: invokeinterface #144,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     224: pop
     225: goto          46
     228: aload         5
     230: checkcast     #117                // class java/util/List
     233: nop
     234: areturn

  public final long calc1(java.lang.String, java.util.Map<java.lang.String, Day21$Monkey>);
    Code:
       0: aload_1
       1: ldc           #165                // String name
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #167                // String map
       9: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_2
      13: aload_1
      14: invokestatic  #173                // Method kotlin/collections/MapsKt.getValue:(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
      17: checkcast     #122                // class Day21$Monkey
      20: astore_3
      21: aload_3
      22: invokevirtual #176                // Method Day21$Monkey.getValue:()Ljava/lang/Long;
      25: ifnull        40
      28: aload_3
      29: invokevirtual #176                // Method Day21$Monkey.getValue:()Ljava/lang/Long;
      32: dup
      33: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      36: invokevirtual #184                // Method java/lang/Long.longValue:()J
      39: lreturn
      40: aload_0
      41: aload_3
      42: invokevirtual #187                // Method Day21$Monkey.getLeft:()Ljava/lang/String;
      45: dup
      46: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      49: aload_2
      50: invokevirtual #189                // Method calc1:(Ljava/lang/String;Ljava/util/Map;)J
      53: lstore        4
      55: aload_0
      56: aload_3
      57: invokevirtual #192                // Method Day21$Monkey.getRight:()Ljava/lang/String;
      60: dup
      61: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      64: aload_2
      65: invokevirtual #189                // Method calc1:(Ljava/lang/String;Ljava/util/Map;)J
      68: lstore        6
      70: aload_3
      71: invokevirtual #196                // Method Day21$Monkey.getOp:()LMathOperator;
      74: dup
      75: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      78: getstatic     #202                // Field Day21$WhenMappings.$EnumSwitchMapping$0:[I
      81: swap
      82: invokevirtual #205                // Method MathOperator.ordinal:()I
      85: iaload
      86: tableswitch   { // 1 to 4
                     1: 116
                     2: 124
                     3: 132
                     4: 140
               default: 148
          }
     116: lload         4
     118: lload         6
     120: ladd
     121: goto          156
     124: lload         4
     126: lload         6
     128: lsub
     129: goto          156
     132: lload         4
     134: lload         6
     136: lmul
     137: goto          156
     140: lload         4
     142: lload         6
     144: ldiv
     145: goto          156
     148: new           #207                // class kotlin/NoWhenBranchMatchedException
     151: dup
     152: invokespecial #208                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     155: athrow
     156: lstore        8
     158: aload_3
     159: lload         8
     161: invokestatic  #141                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     164: invokevirtual #212                // Method Day21$Monkey.setValue:(Ljava/lang/Long;)V
     167: lload         8
     169: lreturn

  public final long calc2(java.lang.String, java.util.Map<java.lang.String, Day21$Monkey>);
    Code:
       0: aload_1
       1: ldc           #165                // String name
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #167                // String map
       9: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_2
      13: aload_1
      14: invokestatic  #173                // Method kotlin/collections/MapsKt.getValue:(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
      17: checkcast     #122                // class Day21$Monkey
      20: astore_3
      21: aload_3
      22: invokevirtual #176                // Method Day21$Monkey.getValue:()Ljava/lang/Long;
      25: ifnull        40
      28: aload_3
      29: invokevirtual #176                // Method Day21$Monkey.getValue:()Ljava/lang/Long;
      32: dup
      33: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      36: invokevirtual #184                // Method java/lang/Long.longValue:()J
      39: lreturn
      40: aload_0
      41: aload_3
      42: invokevirtual #187                // Method Day21$Monkey.getLeft:()Ljava/lang/String;
      45: dup
      46: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      49: aload_2
      50: invokevirtual #222                // Method calc2:(Ljava/lang/String;Ljava/util/Map;)J
      53: lstore        4
      55: aload_0
      56: aload_3
      57: invokevirtual #192                // Method Day21$Monkey.getRight:()Ljava/lang/String;
      60: dup
      61: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      64: aload_2
      65: invokevirtual #222                // Method calc2:(Ljava/lang/String;Ljava/util/Map;)J
      68: lstore        6
      70: aload_3
      71: invokevirtual #225                // Method Day21$Monkey.getName:()Ljava/lang/String;
      74: ldc           #227                // String root
      76: invokestatic  #231                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      79: ifeq          88
      82: lload         6
      84: lload         4
      86: lsub
      87: lreturn
      88: aload_3
      89: invokevirtual #196                // Method Day21$Monkey.getOp:()LMathOperator;
      92: dup
      93: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      96: getstatic     #202                // Field Day21$WhenMappings.$EnumSwitchMapping$0:[I
      99: swap
     100: invokevirtual #205                // Method MathOperator.ordinal:()I
     103: iaload
     104: tableswitch   { // 1 to 4
                     1: 136
                     2: 144
                     3: 152
                     4: 160
               default: 168
          }
     136: lload         4
     138: lload         6
     140: ladd
     141: goto          176
     144: lload         4
     146: lload         6
     148: lsub
     149: goto          176
     152: lload         4
     154: lload         6
     156: lmul
     157: goto          176
     160: lload         4
     162: lload         6
     164: ldiv
     165: goto          176
     168: new           #207                // class kotlin/NoWhenBranchMatchedException
     171: dup
     172: invokespecial #208                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     175: athrow
     176: lstore        8
     178: aload_3
     179: lload         8
     181: invokestatic  #141                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     184: invokevirtual #212                // Method Day21$Monkey.setValue:(Ljava/lang/Long;)V
     187: lload         8
     189: lreturn

  public final java.lang.String part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #78                 // String input
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: invokevirtual #236                // Method parse:(Ljava/util/List;)Ljava/util/List;
      11: astore_2
      12: aload_2
      13: checkcast     #80                 // class java/lang/Iterable
      16: astore        4
      18: iconst_0
      19: istore        5
      21: aload         4
      23: bipush        10
      25: invokestatic  #88                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      28: invokestatic  #240                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
      31: bipush        16
      33: invokestatic  #246                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
      36: istore        6
      38: aload         4
      40: astore        7
      42: new           #248                // class java/util/LinkedHashMap
      45: dup
      46: iload         6
      48: invokespecial #249                // Method java/util/LinkedHashMap."<init>":(I)V
      51: checkcast     #251                // class java/util/Map
      54: astore        8
      56: iconst_0
      57: istore        9
      59: aload         7
      61: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      66: astore        10
      68: aload         10
      70: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      75: ifeq          120
      78: aload         10
      80: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      85: astore        11
      87: aload         8
      89: aload         11
      91: checkcast     #122                // class Day21$Monkey
      94: astore        12
      96: astore        14
      98: iconst_0
      99: istore        13
     101: aload         12
     103: invokevirtual #225                // Method Day21$Monkey.getName:()Ljava/lang/String;
     106: aload         14
     108: swap
     109: aload         11
     111: invokeinterface #255,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     116: pop
     117: goto          68
     120: aload         8
     122: nop
     123: astore_3
     124: aload_0
     125: ldc           #227                // String root
     127: aload_3
     128: invokevirtual #189                // Method calc1:(Ljava/lang/String;Ljava/util/Map;)J
     131: lstore        4
     133: lload         4
     135: invokestatic  #258                // Method java/lang/String.valueOf:(J)Ljava/lang/String;
     138: areturn

  public final java.lang.String part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #78                 // String input
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: ldc2_w        #270                // long 5000000000000l
       9: lstore_2
      10: lconst_0
      11: lstore        4
      13: lload_2
      14: lload         4
      16: lsub
      17: lconst_1
      18: lcmp
      19: ifle          220
      22: lload_2
      23: lload         4
      25: ladd
      26: iconst_2
      27: i2l
      28: ldiv
      29: lstore        6
      31: aload_0
      32: aload_1
      33: invokevirtual #236                // Method parse:(Ljava/util/List;)Ljava/util/List;
      36: astore        8
      38: aload         8
      40: checkcast     #80                 // class java/lang/Iterable
      43: astore        10
      45: iconst_0
      46: istore        11
      48: aload         10
      50: bipush        10
      52: invokestatic  #88                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      55: invokestatic  #240                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
      58: bipush        16
      60: invokestatic  #246                // Method kotlin/ranges/RangesKt.coerceAtLeast:(II)I
      63: istore        12
      65: aload         10
      67: astore        13
      69: new           #248                // class java/util/LinkedHashMap
      72: dup
      73: iload         12
      75: invokespecial #249                // Method java/util/LinkedHashMap."<init>":(I)V
      78: checkcast     #251                // class java/util/Map
      81: astore        14
      83: iconst_0
      84: istore        15
      86: aload         13
      88: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      93: astore        16
      95: aload         16
      97: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     102: ifeq          147
     105: aload         16
     107: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     112: astore        17
     114: aload         14
     116: aload         17
     118: checkcast     #122                // class Day21$Monkey
     121: astore        18
     123: astore        20
     125: iconst_0
     126: istore        19
     128: aload         18
     130: invokevirtual #225                // Method Day21$Monkey.getName:()Ljava/lang/String;
     133: aload         20
     135: swap
     136: aload         17
     138: invokeinterface #255,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     143: pop
     144: goto          95
     147: aload         14
     149: nop
     150: astore        9
     152: aload         9
     154: ldc_w         #273                // String humn
     157: invokeinterface #276,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     162: dup
     163: invokestatic  #180                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     166: checkcast     #122                // class Day21$Monkey
     169: lload         6
     171: invokestatic  #141                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     174: invokevirtual #212                // Method Day21$Monkey.setValue:(Ljava/lang/Long;)V
     177: aload_0
     178: ldc           #227                // String root
     180: aload         9
     182: invokevirtual #222                // Method calc2:(Ljava/lang/String;Ljava/util/Map;)J
     185: lstore        10
     187: lload         10
     189: lconst_0
     190: lcmp
     191: ifeq          214
     194: lload         10
     196: lconst_0
     197: lcmp
     198: ifge          208
     201: lload         6
     203: lstore        4
     205: goto          211
     208: lload         6
     210: lstore_2
     211: goto          13
     214: lload         6
     216: invokestatic  #258                // Method java/lang/String.valueOf:(J)Ljava/lang/String;
     219: areturn
     220: ldc_w         #278                // String Not Found
     223: areturn
}

Compiled from "Day21.kt"
public final class Day21$Monkey {
  private final java.lang.String name;

  private java.lang.Long value;

  private final java.lang.String left;

  private final java.lang.String right;

  private final MathOperator op;

  public Day21$Monkey(java.lang.String, java.lang.Long, java.lang.String, java.lang.String, MathOperator);
    Code:
       0: aload_1
       1: ldc           #10                 // String name
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #19                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #22                 // Field name:Ljava/lang/String;
      15: aload_0
      16: aload_2
      17: putfield      #26                 // Field value:Ljava/lang/Long;
      20: aload_0
      21: aload_3
      22: putfield      #29                 // Field left:Ljava/lang/String;
      25: aload_0
      26: aload         4
      28: putfield      #32                 // Field right:Ljava/lang/String;
      31: aload_0
      32: aload         5
      34: putfield      #36                 // Field op:LMathOperator;
      37: return

  public final java.lang.String getName();
    Code:
       0: aload_0
       1: getfield      #22                 // Field name:Ljava/lang/String;
       4: areturn

  public final java.lang.Long getValue();
    Code:
       0: aload_0
       1: getfield      #26                 // Field value:Ljava/lang/Long;
       4: areturn

  public final void setValue(java.lang.Long);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #26                 // Field value:Ljava/lang/Long;
       5: return

  public final java.lang.String getLeft();
    Code:
       0: aload_0
       1: getfield      #29                 // Field left:Ljava/lang/String;
       4: areturn

  public final java.lang.String getRight();
    Code:
       0: aload_0
       1: getfield      #32                 // Field right:Ljava/lang/String;
       4: areturn

  public final MathOperator getOp();
    Code:
       0: aload_0
       1: getfield      #36                 // Field op:LMathOperator;
       4: areturn

  public final java.lang.String component1();
    Code:
       0: aload_0
       1: getfield      #22                 // Field name:Ljava/lang/String;
       4: areturn

  public final java.lang.Long component2();
    Code:
       0: aload_0
       1: getfield      #26                 // Field value:Ljava/lang/Long;
       4: areturn

  public final java.lang.String component3();
    Code:
       0: aload_0
       1: getfield      #29                 // Field left:Ljava/lang/String;
       4: areturn

  public final java.lang.String component4();
    Code:
       0: aload_0
       1: getfield      #32                 // Field right:Ljava/lang/String;
       4: areturn

  public final MathOperator component5();
    Code:
       0: aload_0
       1: getfield      #36                 // Field op:LMathOperator;
       4: areturn

  public final Day21$Monkey copy(java.lang.String, java.lang.Long, java.lang.String, java.lang.String, MathOperator);
    Code:
       0: aload_1
       1: ldc           #10                 // String name
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day21$Monkey
       9: dup
      10: aload_1
      11: aload_2
      12: aload_3
      13: aload         4
      15: aload         5
      17: invokespecial #58                 // Method "<init>":(Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;LMathOperator;)V
      20: areturn

  public static Day21$Monkey copy$default(Day21$Monkey, java.lang.String, java.lang.Long, java.lang.String, java.lang.String, MathOperator, int, java.lang.Object);
    Code:
       0: iload         6
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #22                 // Field name:Ljava/lang/String;
      11: astore_1
      12: iload         6
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #26                 // Field value:Ljava/lang/Long;
      23: astore_2
      24: iload         6
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #29                 // Field left:Ljava/lang/String;
      35: astore_3
      36: iload         6
      38: bipush        8
      40: iand
      41: ifeq          50
      44: aload_0
      45: getfield      #32                 // Field right:Ljava/lang/String;
      48: astore        4
      50: iload         6
      52: bipush        16
      54: iand
      55: ifeq          64
      58: aload_0
      59: getfield      #36                 // Field op:LMathOperator;
      62: astore        5
      64: aload_0
      65: aload_1
      66: aload_2
      67: aload_3
      68: aload         4
      70: aload         5
      72: invokevirtual #62                 // Method copy:(Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/lang/String;LMathOperator;)LDay21$Monkey;
      75: areturn

  public java.lang.String toString();
    Code:
       0: new           #65                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #66                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #68                 // String Monkey(name=
       9: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #22                 // Field name:Ljava/lang/String;
      16: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      19: ldc           #74                 // String , value=
      21: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #26                 // Field value:Ljava/lang/Long;
      28: invokevirtual #77                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      31: ldc           #79                 // String , left=
      33: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #29                 // Field left:Ljava/lang/String;
      40: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      43: ldc           #81                 // String , right=
      45: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      48: aload_0
      49: getfield      #32                 // Field right:Ljava/lang/String;
      52: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      55: ldc           #83                 // String , op=
      57: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      60: aload_0
      61: getfield      #36                 // Field op:LMathOperator;
      64: invokevirtual #77                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      67: bipush        41
      69: invokevirtual #86                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      72: invokevirtual #88                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      75: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #22                 // Field name:Ljava/lang/String;
       4: invokevirtual #94                 // Method java/lang/String.hashCode:()I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #26                 // Field value:Ljava/lang/Long;
      16: ifnonnull     23
      19: iconst_0
      20: goto          30
      23: aload_0
      24: getfield      #26                 // Field value:Ljava/lang/Long;
      27: invokevirtual #95                 // Method java/lang/Object.hashCode:()I
      30: iadd
      31: istore_1
      32: iload_1
      33: bipush        31
      35: imul
      36: aload_0
      37: getfield      #29                 // Field left:Ljava/lang/String;
      40: ifnonnull     47
      43: iconst_0
      44: goto          54
      47: aload_0
      48: getfield      #29                 // Field left:Ljava/lang/String;
      51: invokevirtual #94                 // Method java/lang/String.hashCode:()I
      54: iadd
      55: istore_1
      56: iload_1
      57: bipush        31
      59: imul
      60: aload_0
      61: getfield      #32                 // Field right:Ljava/lang/String;
      64: ifnonnull     71
      67: iconst_0
      68: goto          78
      71: aload_0
      72: getfield      #32                 // Field right:Ljava/lang/String;
      75: invokevirtual #94                 // Method java/lang/String.hashCode:()I
      78: iadd
      79: istore_1
      80: iload_1
      81: bipush        31
      83: imul
      84: aload_0
      85: getfield      #36                 // Field op:LMathOperator;
      88: ifnonnull     95
      91: iconst_0
      92: goto          102
      95: aload_0
      96: getfield      #36                 // Field op:LMathOperator;
      99: invokevirtual #98                 // Method MathOperator.hashCode:()I
     102: iadd
     103: istore_1
     104: iload_1
     105: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day21$Monkey
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day21$Monkey
      20: astore_2
      21: aload_0
      22: getfield      #22                 // Field name:Ljava/lang/String;
      25: aload_2
      26: getfield      #22                 // Field name:Ljava/lang/String;
      29: invokestatic  #106                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #26                 // Field value:Ljava/lang/Long;
      41: aload_2
      42: getfield      #26                 // Field value:Ljava/lang/Long;
      45: invokestatic  #106                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      48: ifne          53
      51: iconst_0
      52: ireturn
      53: aload_0
      54: getfield      #29                 // Field left:Ljava/lang/String;
      57: aload_2
      58: getfield      #29                 // Field left:Ljava/lang/String;
      61: invokestatic  #106                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      64: ifne          69
      67: iconst_0
      68: ireturn
      69: aload_0
      70: getfield      #32                 // Field right:Ljava/lang/String;
      73: aload_2
      74: getfield      #32                 // Field right:Ljava/lang/String;
      77: invokestatic  #106                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      80: ifne          85
      83: iconst_0
      84: ireturn
      85: aload_0
      86: getfield      #36                 // Field op:LMathOperator;
      89: aload_2
      90: getfield      #36                 // Field op:LMathOperator;
      93: if_acmpeq     98
      96: iconst_0
      97: ireturn
      98: iconst_1
      99: ireturn
}