package day03

import java.nio.file.Files
import java.nio.file.Paths

fun main() {
  fun part1(numbers: List<String>): Int {
    val count = IntArray(numbers[0].length)
    for (num in numbers) {
      for ((index, bit) in num.withIndex()) {
        count[index] += if (bit == '1') 1 else 0
      }
    }
    val gamma = count
      .map { if (it + it > numbers.size) 1 else 0 }
      .joinToString("") { it.toString() }
      .toInt(2)
    val epsilon = count
      .map { if (it + it > numbers.size) 0 else 1 }
      .joinToString("") { it.toString() }
      .toInt(2)
    return gamma * epsilon
  }
  fun part2(report: List<String>): Int {
    tailrec fun filter(list: List<String>, position: Int, predicate: (char: Char, mostCommon: Char) -> Boolean): String {
      if (list.size == 1) return list.first()
      val sum = list.sumOf { it[position].code - '0'.code }
      val mostCommon = if (sum + sum >= list.size) '1' else '0'
      return filter(
        list.filter {
          predicate(it[position], mostCommon)
        },
        position + 1,
        predicate
      )
    }

    val oxygenGeneratorRating = filter(report, 0) { char, mostCommon ->
      char == mostCommon
    }.toInt(2)
    val co2ScrubberRating = filter(report, 0) { char, mostCommon ->
      char != mostCommon
    }.toInt(2)
    return oxygenGeneratorRating * co2ScrubberRating
  }

  check(part1(readInput("test-input.txt")) == 198)
  check(part2(readInput("test-input.txt")) == 230)

  println(part1(readInput("input.txt")))
  println(part2(readInput("input.txt")))
}

private fun readInput(s: String): List<String> {
  return Files.newBufferedReader(Paths.get("src/day03/$s")).readLines().filterNot { it.isBlank() }.also { list ->
    check(list.all { it.length == list[0].length })
  }
}

Compiled from "Solution.kt"
public final class day03.SolutionKt {
  public static final void main();
    Code:
       0: ldc           #8                  // String test-input.txt
       2: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
       5: invokestatic  #16                 // Method main$part1:(Ljava/util/List;)I
       8: sipush        198
      11: if_icmpne     18
      14: iconst_1
      15: goto          19
      18: iconst_0
      19: ifne          32
      22: new           #18                 // class java/lang/IllegalStateException
      25: dup
      26: ldc           #20                 // String Check failed.
      28: invokespecial #24                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      31: athrow
      32: ldc           #8                  // String test-input.txt
      34: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      37: invokestatic  #27                 // Method main$part2:(Ljava/util/List;)I
      40: sipush        230
      43: if_icmpne     50
      46: iconst_1
      47: goto          51
      50: iconst_0
      51: ifne          64
      54: new           #18                 // class java/lang/IllegalStateException
      57: dup
      58: ldc           #20                 // String Check failed.
      60: invokespecial #24                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      63: athrow
      64: ldc           #29                 // String input.txt
      66: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      69: invokestatic  #16                 // Method main$part1:(Ljava/util/List;)I
      72: istore_0
      73: getstatic     #35                 // Field java/lang/System.out:Ljava/io/PrintStream;
      76: iload_0
      77: invokevirtual #41                 // Method java/io/PrintStream.println:(I)V
      80: ldc           #29                 // String input.txt
      82: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      85: invokestatic  #27                 // Method main$part2:(Ljava/util/List;)I
      88: istore_0
      89: getstatic     #35                 // Field java/lang/System.out:Ljava/io/PrintStream;
      92: iload_0
      93: invokevirtual #41                 // Method java/io/PrintStream.println:(I)V
      96: return

  private static final java.util.List<java.lang.String> readInput(java.lang.String);
    Code:
       0: new           #44                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #46                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #48                 // String src/day03/
       9: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      16: invokevirtual #56                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      19: iconst_0
      20: anewarray     #58                 // class java/lang/String
      23: invokestatic  #64                 // Method java/nio/file/Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
      26: invokestatic  #70                 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
      29: dup
      30: ldc           #72                 // String newBufferedReader(...)
      32: invokestatic  #78                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      35: checkcast     #80                 // class java/io/Reader
      38: invokestatic  #86                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      41: checkcast     #88                 // class java/lang/Iterable
      44: astore_1
      45: iconst_0
      46: istore_2
      47: aload_1
      48: astore_3
      49: new           #90                 // class java/util/ArrayList
      52: dup
      53: invokespecial #91                 // Method java/util/ArrayList."<init>":()V
      56: checkcast     #93                 // class java/util/Collection
      59: astore        4
      61: iconst_0
      62: istore        5
      64: aload_3
      65: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      70: astore        6
      72: aload         6
      74: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      79: ifeq          125
      82: aload         6
      84: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      89: astore        7
      91: aload         7
      93: checkcast     #58                 // class java/lang/String
      96: astore        8
      98: iconst_0
      99: istore        9
     101: aload         8
     103: checkcast     #109                // class java/lang/CharSequence
     106: invokestatic  #115                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
     109: ifne          72
     112: aload         4
     114: aload         7
     116: invokeinterface #119,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     121: pop
     122: goto          72
     125: aload         4
     127: checkcast     #121                // class java/util/List
     130: nop
     131: astore_1
     132: aload_1
     133: astore_2
     134: iconst_0
     135: istore_3
     136: aload_2
     137: checkcast     #88                 // class java/lang/Iterable
     140: astore        4
     142: iconst_0
     143: istore        5
     145: aload         4
     147: instanceof    #93                 // class java/util/Collection
     150: ifeq          170
     153: aload         4
     155: checkcast     #93                 // class java/util/Collection
     158: invokeinterface #124,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     163: ifeq          170
     166: iconst_1
     167: goto          242
     170: aload         4
     172: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     177: astore        6
     179: aload         6
     181: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     186: ifeq          241
     189: aload         6
     191: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     196: astore        7
     198: aload         7
     200: checkcast     #58                 // class java/lang/String
     203: astore        8
     205: iconst_0
     206: istore        9
     208: aload         8
     210: invokevirtual #128                // Method java/lang/String.length:()I
     213: aload_2
     214: iconst_0
     215: invokeinterface #131,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     220: checkcast     #58                 // class java/lang/String
     223: invokevirtual #128                // Method java/lang/String.length:()I
     226: if_icmpne     233
     229: iconst_1
     230: goto          234
     233: iconst_0
     234: ifne          179
     237: iconst_0
     238: goto          242
     241: iconst_1
     242: ifne          255
     245: new           #18                 // class java/lang/IllegalStateException
     248: dup
     249: ldc           #20                 // String Check failed.
     251: invokespecial #24                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
     254: athrow
     255: nop
     256: aload_1
     257: areturn

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

  private static final java.lang.CharSequence main$part1$lambda$1(int);
    Code:
       0: iload_0
       1: invokestatic  #163                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
       4: checkcast     #109                // class java/lang/CharSequence
       7: areturn

  private static final java.lang.CharSequence main$part1$lambda$3(int);
    Code:
       0: iload_0
       1: invokestatic  #163                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
       4: checkcast     #109                // class java/lang/CharSequence
       7: areturn

  private static final int main$part1(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: iconst_0
       2: invokeinterface #131,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
       7: checkcast     #58                 // class java/lang/String
      10: invokevirtual #128                // Method java/lang/String.length:()I
      13: newarray       int
      15: astore_1
      16: aload_0
      17: invokeinterface #166,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      22: astore_2
      23: aload_2
      24: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      29: ifeq          97
      32: aload_2
      33: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: checkcast     #58                 // class java/lang/String
      41: astore_3
      42: iconst_0
      43: istore        4
      45: aload_3
      46: invokevirtual #128                // Method java/lang/String.length:()I
      49: istore        5
      51: iload         4
      53: iload         5
      55: if_icmpge     23
      58: iload         4
      60: istore        6
      62: aload_3
      63: iload         4
      65: invokevirtual #170                // Method java/lang/String.charAt:(I)C
      68: istore        7
      70: aload_1
      71: iload         6
      73: aload_1
      74: iload         6
      76: iaload
      77: iload         7
      79: bipush        49
      81: if_icmpne     88
      84: iconst_1
      85: goto          89
      88: iconst_0
      89: iadd
      90: iastore
      91: iinc          4, 1
      94: goto          51
      97: aload_1
      98: astore_3
      99: nop
     100: iconst_0
     101: istore        4
     103: aload_3
     104: astore        5
     106: new           #90                 // class java/util/ArrayList
     109: dup
     110: aload_3
     111: arraylength
     112: invokespecial #172                // Method java/util/ArrayList."<init>":(I)V
     115: checkcast     #93                 // class java/util/Collection
     118: astore        6
     120: iconst_0
     121: istore        7
     123: iconst_0
     124: istore        8
     126: aload         5
     128: arraylength
     129: istore        9
     131: iload         8
     133: iload         9
     135: if_icmpge     193
     138: aload         5
     140: iload         8
     142: iaload
     143: istore        10
     145: aload         6
     147: iload         10
     149: istore        11
     151: astore        14
     153: iconst_0
     154: istore        12
     156: iload         11
     158: iload         11
     160: iadd
     161: aload_0
     162: invokeinterface #175,  1          // InterfaceMethod java/util/List.size:()I
     167: if_icmple     174
     170: iconst_1
     171: goto          175
     174: iconst_0
     175: invokestatic  #180                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     178: aload         14
     180: swap
     181: invokeinterface #119,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     186: pop
     187: iinc          8, 1
     190: goto          131
     193: aload         6
     195: checkcast     #121                // class java/util/List
     198: nop
     199: checkcast     #88                 // class java/lang/Iterable
     202: ldc           #182                // String
     204: checkcast     #109                // class java/lang/CharSequence
     207: aconst_null
     208: aconst_null
     209: iconst_0
     210: aconst_null
     211: invokedynamic #200,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
     216: bipush        30
     218: aconst_null
     219: invokestatic  #206                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
     222: astore_3
     223: iconst_2
     224: istore        4
     226: aload_3
     227: iload         4
     229: invokestatic  #212                // Method kotlin/text/CharsKt.checkRadix:(I)I
     232: invokestatic  #216                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
     235: istore_2
     236: aload_1
     237: astore        4
     239: nop
     240: iconst_0
     241: istore        5
     243: aload         4
     245: astore        6
     247: new           #90                 // class java/util/ArrayList
     250: dup
     251: aload         4
     253: arraylength
     254: invokespecial #172                // Method java/util/ArrayList."<init>":(I)V
     257: checkcast     #93                 // class java/util/Collection
     260: astore        7
     262: iconst_0
     263: istore        8
     265: iconst_0
     266: istore        9
     268: aload         6
     270: arraylength
     271: istore        10
     273: iload         9
     275: iload         10
     277: if_icmpge     335
     280: aload         6
     282: iload         9
     284: iaload
     285: istore        11
     287: aload         7
     289: iload         11
     291: istore        12
     293: astore        14
     295: iconst_0
     296: istore        13
     298: iload         12
     300: iload         12
     302: iadd
     303: aload_0
     304: invokeinterface #175,  1          // InterfaceMethod java/util/List.size:()I
     309: if_icmple     316
     312: iconst_0
     313: goto          317
     316: iconst_1
     317: invokestatic  #180                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     320: aload         14
     322: swap
     323: invokeinterface #119,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     328: pop
     329: iinc          9, 1
     332: goto          273
     335: aload         7
     337: checkcast     #121                // class java/util/List
     340: nop
     341: checkcast     #88                 // class java/lang/Iterable
     344: ldc           #182                // String
     346: checkcast     #109                // class java/lang/CharSequence
     349: aconst_null
     350: aconst_null
     351: iconst_0
     352: aconst_null
     353: invokedynamic #220,  0            // InvokeDynamic #1:invoke:()Lkotlin/jvm/functions/Function1;
     358: bipush        30
     360: aconst_null
     361: invokestatic  #206                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
     364: astore        4
     366: iconst_2
     367: istore        5
     369: aload         4
     371: iload         5
     373: invokestatic  #212                // Method kotlin/text/CharsKt.checkRadix:(I)I
     376: invokestatic  #216                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
     379: istore_3
     380: iload_2
     381: iload_3
     382: imul
     383: ireturn

  private static final java.lang.String main$part2$filter(java.util.List<java.lang.String>, int, kotlin.jvm.functions.Function2<? super java.lang.Character, ? super java.lang.Character, java.lang.Boolean>);
    Code:
       0: aload_0
       1: invokeinterface #175,  1          // InterfaceMethod java/util/List.size:()I
       6: iconst_1
       7: if_icmpne     18
      10: aload_0
      11: invokestatic  #244                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
      14: checkcast     #58                 // class java/lang/String
      17: areturn
      18: aload_0
      19: checkcast     #88                 // class java/lang/Iterable
      22: astore        4
      24: iconst_0
      25: istore        5
      27: aload         4
      29: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      34: astore        6
      36: aload         6
      38: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      43: ifeq          90
      46: aload         6
      48: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      53: astore        7
      55: iload         5
      57: aload         7
      59: checkcast     #58                 // class java/lang/String
      62: astore        8
      64: istore        15
      66: iconst_0
      67: istore        9
      69: aload         8
      71: iload_1
      72: invokevirtual #170                // Method java/lang/String.charAt:(I)C
      75: bipush        48
      77: isub
      78: istore        16
      80: iload         15
      82: iload         16
      84: iadd
      85: istore        5
      87: goto          36
      90: iload         5
      92: istore_3
      93: iload_3
      94: iload_3
      95: iadd
      96: aload_0
      97: invokeinterface #175,  1          // InterfaceMethod java/util/List.size:()I
     102: if_icmplt     110
     105: bipush        49
     107: goto          112
     110: bipush        48
     112: istore        4
     114: aload_0
     115: checkcast     #88                 // class java/lang/Iterable
     118: astore        6
     120: iconst_0
     121: istore        7
     123: aload         6
     125: astore        8
     127: new           #90                 // class java/util/ArrayList
     130: dup
     131: invokespecial #91                 // Method java/util/ArrayList."<init>":()V
     134: checkcast     #93                 // class java/util/Collection
     137: astore        9
     139: iconst_0
     140: istore        10
     142: aload         8
     144: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     149: astore        11
     151: aload         11
     153: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     158: ifeq          222
     161: aload         11
     163: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     168: astore        12
     170: aload         12
     172: checkcast     #58                 // class java/lang/String
     175: astore        13
     177: iconst_0
     178: istore        14
     180: aload_2
     181: aload         13
     183: iload_1
     184: invokevirtual #170                // Method java/lang/String.charAt:(I)C
     187: invokestatic  #249                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     190: iload         4
     192: invokestatic  #249                // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     195: invokeinterface #254,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     200: checkcast     #256                // class java/lang/Boolean
     203: invokevirtual #259                // Method java/lang/Boolean.booleanValue:()Z
     206: ifeq          151
     209: aload         9
     211: aload         12
     213: invokeinterface #119,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     218: pop
     219: goto          151
     222: aload         9
     224: checkcast     #121                // class java/util/List
     227: nop
     228: astore        5
     230: iload_1
     231: iconst_1
     232: iadd
     233: istore        6
     235: aload_2
     236: astore        7
     238: aload         5
     240: astore_0
     241: iload         6
     243: istore_1
     244: aload         7
     246: astore_2
     247: goto          0

  private static final boolean main$part2$lambda$6(char, char);
    Code:
       0: iload_0
       1: iload_1
       2: if_icmpne     9
       5: iconst_1
       6: goto          10
       9: iconst_0
      10: ireturn

  private static final boolean main$part2$lambda$7(char, char);
    Code:
       0: iload_0
       1: iload_1
       2: if_icmpeq     9
       5: iconst_1
       6: goto          10
       9: iconst_0
      10: ireturn

  private static final int main$part2(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: iconst_0
       2: invokedynamic #283,  0            // InvokeDynamic #2:invoke:()Lkotlin/jvm/functions/Function2;
       7: invokestatic  #285                // Method main$part2$filter:(Ljava/util/List;ILkotlin/jvm/functions/Function2;)Ljava/lang/String;
      10: iconst_2
      11: invokestatic  #212                // Method kotlin/text/CharsKt.checkRadix:(I)I
      14: invokestatic  #216                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
      17: istore_1
      18: aload_0
      19: iconst_0
      20: invokedynamic #289,  0            // InvokeDynamic #3:invoke:()Lkotlin/jvm/functions/Function2;
      25: invokestatic  #285                // Method main$part2$filter:(Ljava/util/List;ILkotlin/jvm/functions/Function2;)Ljava/lang/String;
      28: iconst_2
      29: invokestatic  #212                // Method kotlin/text/CharsKt.checkRadix:(I)I
      32: invokestatic  #216                // Method java/lang/Integer.parseInt:(Ljava/lang/String;I)I
      35: istore_2
      36: iload_1
      37: iload_2
      38: imul
      39: ireturn
}


package day05

import java.nio.file.Files
import java.nio.file.Paths
import kotlin.math.sign

fun main() {
  fun part1(lines: List<Line>): Int {
    val maxX = lines.maxOf { maxOf(it.first.first, it.second.first) }
    val maxY = lines.maxOf { maxOf(it.first.second, it.second.second) }
    val map = Array(maxX + 1) {
      IntArray(maxY + 1)
    }
    lines
      .filter { it.first.first == it.second.first || it.first.second == it.second.second }
      .forEach { (from, to) ->
        for (x in minOf(from.first, to.first) .. maxOf(from.first, to.first)) {
          for (y in minOf(from.second, to.second) .. maxOf(from.second, to.second)) {
            map[x][y]++
          }
        }
      }
    return map.sumOf { row -> row.count { it > 1 } }
  }
  fun part2(lines: List<Line>): Int {
    val maxX = lines.maxOf { maxOf(it.first.first, it.second.first) }
    val maxY = lines.maxOf { maxOf(it.first.second, it.second.second) }
    val map = Array(maxX + 1) {
      IntArray(maxY + 1)
    }
    for ((from, to) in lines) {
      val dx = (to.first - from.first).sign
      val dy = (to.second - from.second).sign
      var x = from.first
      var y = from.second
      map[x][y]++
      while (x != to.first || y != to.second) {
        x += dx
        y += dy
        map[x][y]++
      }
    }
    return map.sumOf { row -> row.count { it > 1 } }
  }

  check(part1(readInput("test-input.txt")) == 5)
  check(part2(readInput("test-input.txt")) == 12)

  println(part1(readInput("input.txt")))
  println(part2(readInput("input.txt")))
}

private fun readInput(s: String): List<Line> {
  return Files.newBufferedReader(Paths.get("src/day05/$s")).readLines().map {
    val (from, to) = it.split(" -> ")
    val (x1, y1) = from.split(",").map { it.toInt() }
    val (x2, y2) = to.split(",").map { it.toInt() }
    Pair(x1, y1) to Pair(x2, y2)
  }
}

typealias Point = Pair<Int, Int>
typealias Line = Pair<Point, Point>

Compiled from "Solution.kt"
public final class day05.SolutionKt {
  public static final void main();
    Code:
       0: ldc           #8                  // String test-input.txt
       2: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
       5: invokestatic  #16                 // Method main$part1:(Ljava/util/List;)I
       8: iconst_5
       9: if_icmpne     16
      12: iconst_1
      13: goto          17
      16: iconst_0
      17: ifne          30
      20: new           #18                 // class java/lang/IllegalStateException
      23: dup
      24: ldc           #20                 // String Check failed.
      26: invokespecial #24                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      29: athrow
      30: ldc           #8                  // String test-input.txt
      32: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      35: invokestatic  #27                 // Method main$part2:(Ljava/util/List;)I
      38: bipush        12
      40: if_icmpne     47
      43: iconst_1
      44: goto          48
      47: iconst_0
      48: ifne          61
      51: new           #18                 // class java/lang/IllegalStateException
      54: dup
      55: ldc           #20                 // String Check failed.
      57: invokespecial #24                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      60: athrow
      61: ldc           #29                 // String input.txt
      63: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      66: invokestatic  #16                 // Method main$part1:(Ljava/util/List;)I
      69: istore_0
      70: getstatic     #35                 // Field java/lang/System.out:Ljava/io/PrintStream;
      73: iload_0
      74: invokevirtual #41                 // Method java/io/PrintStream.println:(I)V
      77: ldc           #29                 // String input.txt
      79: invokestatic  #12                 // Method readInput:(Ljava/lang/String;)Ljava/util/List;
      82: invokestatic  #27                 // Method main$part2:(Ljava/util/List;)I
      85: istore_0
      86: getstatic     #35                 // Field java/lang/System.out:Ljava/io/PrintStream;
      89: iload_0
      90: invokevirtual #41                 // Method java/io/PrintStream.println:(I)V
      93: return

  private static final java.util.List<kotlin.Pair<kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>>> readInput(java.lang.String);
    Code:
       0: new           #44                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #46                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #48                 // String src/day05/
       9: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      16: invokevirtual #56                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      19: iconst_0
      20: anewarray     #58                 // class java/lang/String
      23: invokestatic  #64                 // Method java/nio/file/Paths.get:(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;
      26: invokestatic  #70                 // Method java/nio/file/Files.newBufferedReader:(Ljava/nio/file/Path;)Ljava/io/BufferedReader;
      29: dup
      30: ldc           #72                 // String newBufferedReader(...)
      32: invokestatic  #78                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      35: checkcast     #80                 // class java/io/Reader
      38: invokestatic  #86                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      41: checkcast     #88                 // class java/lang/Iterable
      44: astore_1
      45: iconst_0
      46: istore_2
      47: aload_1
      48: astore_3
      49: new           #90                 // class java/util/ArrayList
      52: dup
      53: aload_1
      54: bipush        10
      56: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      59: invokespecial #98                 // Method java/util/ArrayList."<init>":(I)V
      62: checkcast     #100                // class java/util/Collection
      65: astore        4
      67: iconst_0
      68: istore        5
      70: aload_3
      71: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      76: astore        6
      78: aload         6
      80: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      85: ifeq          543
      88: aload         6
      90: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      95: astore        7
      97: aload         4
      99: aload         7
     101: checkcast     #58                 // class java/lang/String
     104: astore        8
     106: astore        27
     108: iconst_0
     109: istore        9
     111: aload         8
     113: checkcast     #116                // class java/lang/CharSequence
     116: iconst_1
     117: anewarray     #58                 // class java/lang/String
     120: astore        10
     122: aload         10
     124: iconst_0
     125: ldc           #118                // String  ->
     127: aastore
     128: aload         10
     130: iconst_0
     131: iconst_0
     132: bipush        6
     134: aconst_null
     135: invokestatic  #124                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     138: astore        11
     140: aload         11
     142: iconst_0
     143: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     148: checkcast     #58                 // class java/lang/String
     151: astore        10
     153: aload         11
     155: iconst_1
     156: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     161: checkcast     #58                 // class java/lang/String
     164: astore        12
     166: aload         10
     168: checkcast     #116                // class java/lang/CharSequence
     171: iconst_1
     172: anewarray     #58                 // class java/lang/String
     175: astore        13
     177: aload         13
     179: iconst_0
     180: ldc           #131                // String ,
     182: aastore
     183: aload         13
     185: iconst_0
     186: iconst_0
     187: bipush        6
     189: aconst_null
     190: invokestatic  #124                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     193: checkcast     #88                 // class java/lang/Iterable
     196: astore        13
     198: iconst_0
     199: istore        14
     201: aload         13
     203: astore        15
     205: new           #90                 // class java/util/ArrayList
     208: dup
     209: aload         13
     211: bipush        10
     213: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     216: invokespecial #98                 // Method java/util/ArrayList."<init>":(I)V
     219: checkcast     #100                // class java/util/Collection
     222: astore        16
     224: iconst_0
     225: istore        17
     227: aload         15
     229: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     234: astore        18
     236: aload         18
     238: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     243: ifeq          290
     246: aload         18
     248: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     253: astore        19
     255: aload         16
     257: aload         19
     259: checkcast     #58                 // class java/lang/String
     262: astore        20
     264: astore        21
     266: iconst_0
     267: istore        22
     269: aload         20
     271: invokestatic  #137                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     274: nop
     275: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     278: aload         21
     280: swap
     281: invokeinterface #145,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     286: pop
     287: goto          236
     290: aload         16
     292: checkcast     #126                // class java/util/List
     295: nop
     296: astore        23
     298: aload         23
     300: iconst_0
     301: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     306: checkcast     #147                // class java/lang/Number
     309: invokevirtual #151                // Method java/lang/Number.intValue:()I
     312: istore        13
     314: aload         23
     316: iconst_1
     317: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     322: checkcast     #147                // class java/lang/Number
     325: invokevirtual #151                // Method java/lang/Number.intValue:()I
     328: istore        14
     330: aload         12
     332: checkcast     #116                // class java/lang/CharSequence
     335: iconst_1
     336: anewarray     #58                 // class java/lang/String
     339: astore        16
     341: aload         16
     343: iconst_0
     344: ldc           #131                // String ,
     346: aastore
     347: aload         16
     349: iconst_0
     350: iconst_0
     351: bipush        6
     353: aconst_null
     354: invokestatic  #124                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     357: checkcast     #88                 // class java/lang/Iterable
     360: astore        16
     362: iconst_0
     363: istore        17
     365: aload         16
     367: astore        18
     369: new           #90                 // class java/util/ArrayList
     372: dup
     373: aload         16
     375: bipush        10
     377: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     380: invokespecial #98                 // Method java/util/ArrayList."<init>":(I)V
     383: checkcast     #100                // class java/util/Collection
     386: astore        19
     388: iconst_0
     389: istore        20
     391: aload         18
     393: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     398: astore        22
     400: aload         22
     402: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     407: ifeq          454
     410: aload         22
     412: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     417: astore        24
     419: aload         19
     421: aload         24
     423: checkcast     #58                 // class java/lang/String
     426: astore        25
     428: astore        21
     430: iconst_0
     431: istore        26
     433: aload         25
     435: invokestatic  #137                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     438: nop
     439: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     442: aload         21
     444: swap
     445: invokeinterface #145,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     450: pop
     451: goto          400
     454: aload         19
     456: checkcast     #126                // class java/util/List
     459: nop
     460: astore        15
     462: aload         15
     464: iconst_0
     465: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     470: checkcast     #147                // class java/lang/Number
     473: invokevirtual #151                // Method java/lang/Number.intValue:()I
     476: istore        16
     478: aload         15
     480: iconst_1
     481: invokeinterface #129,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     486: checkcast     #147                // class java/lang/Number
     489: invokevirtual #151                // Method java/lang/Number.intValue:()I
     492: istore        17
     494: new           #153                // class kotlin/Pair
     497: dup
     498: iload         13
     500: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     503: iload         14
     505: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     508: invokespecial #156                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     511: new           #153                // class kotlin/Pair
     514: dup
     515: iload         16
     517: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     520: iload         17
     522: invokestatic  #141                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     525: invokespecial #156                // Method kotlin/Pair."<init>":(Ljava/lang/Object;Ljava/lang/Object;)V
     528: invokestatic  #162                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     531: aload         27
     533: swap
     534: invokeinterface #145,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     539: pop
     540: goto          78
     543: aload         4
     545: checkcast     #126                // class java/util/List
     548: nop
     549: areturn

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

  private static final int main$part1(java.util.List<kotlin.Pair<kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>>>);
    Code:
       0: aload_0
       1: checkcast     #88                 // class java/lang/Iterable
       4: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
       9: astore_3
      10: aload_3
      11: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      16: ifne          27
      19: new           #191                // class java/util/NoSuchElementException
      22: dup
      23: invokespecial #192                // Method java/util/NoSuchElementException."<init>":()V
      26: athrow
      27: aload_3
      28: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      33: checkcast     #153                // class kotlin/Pair
      36: astore        4
      38: iconst_0
      39: istore        5
      41: aload         4
      43: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      46: checkcast     #153                // class kotlin/Pair
      49: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      52: checkcast     #147                // class java/lang/Number
      55: invokevirtual #151                // Method java/lang/Number.intValue:()I
      58: aload         4
      60: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      63: checkcast     #153                // class kotlin/Pair
      66: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      69: checkcast     #147                // class java/lang/Number
      72: invokevirtual #151                // Method java/lang/Number.intValue:()I
      75: invokestatic  #204                // Method java/lang/Math.max:(II)I
      78: nop
      79: istore        4
      81: aload_3
      82: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      87: ifeq          158
      90: aload_3
      91: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: checkcast     #153                // class kotlin/Pair
      99: astore        5
     101: iconst_0
     102: istore        6
     104: aload         5
     106: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     109: checkcast     #153                // class kotlin/Pair
     112: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     115: checkcast     #147                // class java/lang/Number
     118: invokevirtual #151                // Method java/lang/Number.intValue:()I
     121: aload         5
     123: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     126: checkcast     #153                // class kotlin/Pair
     129: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     132: checkcast     #147                // class java/lang/Number
     135: invokevirtual #151                // Method java/lang/Number.intValue:()I
     138: invokestatic  #204                // Method java/lang/Math.max:(II)I
     141: nop
     142: istore        5
     144: iload         4
     146: iload         5
     148: if_icmpge     81
     151: iload         5
     153: istore        4
     155: goto          81
     158: iload         4
     160: istore_1
     161: aload_0
     162: checkcast     #88                 // class java/lang/Iterable
     165: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     170: astore        4
     172: aload         4
     174: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     179: ifne          190
     182: new           #191                // class java/util/NoSuchElementException
     185: dup
     186: invokespecial #192                // Method java/util/NoSuchElementException."<init>":()V
     189: athrow
     190: aload         4
     192: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     197: checkcast     #153                // class kotlin/Pair
     200: astore        5
     202: iconst_0
     203: istore        6
     205: aload         5
     207: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     210: checkcast     #153                // class kotlin/Pair
     213: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     216: checkcast     #147                // class java/lang/Number
     219: invokevirtual #151                // Method java/lang/Number.intValue:()I
     222: aload         5
     224: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     227: checkcast     #153                // class kotlin/Pair
     230: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     233: checkcast     #147                // class java/lang/Number
     236: invokevirtual #151                // Method java/lang/Number.intValue:()I
     239: invokestatic  #204                // Method java/lang/Math.max:(II)I
     242: nop
     243: istore        5
     245: aload         4
     247: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     252: ifeq          324
     255: aload         4
     257: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     262: checkcast     #153                // class kotlin/Pair
     265: astore        6
     267: iconst_0
     268: istore        7
     270: aload         6
     272: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     275: checkcast     #153                // class kotlin/Pair
     278: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     281: checkcast     #147                // class java/lang/Number
     284: invokevirtual #151                // Method java/lang/Number.intValue:()I
     287: aload         6
     289: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     292: checkcast     #153                // class kotlin/Pair
     295: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     298: checkcast     #147                // class java/lang/Number
     301: invokevirtual #151                // Method java/lang/Number.intValue:()I
     304: invokestatic  #204                // Method java/lang/Math.max:(II)I
     307: nop
     308: istore        6
     310: iload         5
     312: iload         6
     314: if_icmpge     245
     317: iload         6
     319: istore        5
     321: goto          245
     324: iload         5
     326: istore_2
     327: iconst_0
     328: istore        4
     330: iload_1
     331: iconst_1
     332: iadd
     333: istore        5
     335: iload         5
     337: anewarray     #206                // class "[I"
     340: astore        6
     342: iload         4
     344: iload         5
     346: if_icmpge     369
     349: iload         4
     351: istore        7
     353: aload         6
     355: iload         7
     357: iload_2
     358: iconst_1
     359: iadd
     360: newarray       int
     362: aastore
     363: iinc          4, 1
     366: goto          342
     369: aload         6
     371: astore_3
     372: aload_0
     373: checkcast     #88                 // class java/lang/Iterable
     376: astore        4
     378: nop
     379: iconst_0
     380: istore        5
     382: aload         4
     384: astore        6
     386: new           #90                 // class java/util/ArrayList
     389: dup
     390: invokespecial #207                // Method java/util/ArrayList."<init>":()V
     393: checkcast     #100                // class java/util/Collection
     396: astore        7
     398: iconst_0
     399: istore        8
     401: aload         6
     403: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     408: astore        9
     410: aload         9
     412: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     417: ifeq          534
     420: aload         9
     422: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     427: astore        10
     429: aload         10
     431: checkcast     #153                // class kotlin/Pair
     434: astore        11
     436: iconst_0
     437: istore        12
     439: aload         11
     441: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     444: checkcast     #153                // class kotlin/Pair
     447: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     450: checkcast     #147                // class java/lang/Number
     453: invokevirtual #151                // Method java/lang/Number.intValue:()I
     456: aload         11
     458: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     461: checkcast     #153                // class kotlin/Pair
     464: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     467: checkcast     #147                // class java/lang/Number
     470: invokevirtual #151                // Method java/lang/Number.intValue:()I
     473: if_icmpeq     513
     476: aload         11
     478: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     481: checkcast     #153                // class kotlin/Pair
     484: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     487: checkcast     #147                // class java/lang/Number
     490: invokevirtual #151                // Method java/lang/Number.intValue:()I
     493: aload         11
     495: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     498: checkcast     #153                // class kotlin/Pair
     501: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     504: checkcast     #147                // class java/lang/Number
     507: invokevirtual #151                // Method java/lang/Number.intValue:()I
     510: if_icmpne     517
     513: iconst_1
     514: goto          518
     517: iconst_0
     518: ifeq          410
     521: aload         7
     523: aload         10
     525: invokeinterface #145,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     530: pop
     531: goto          410
     534: aload         7
     536: checkcast     #126                // class java/util/List
     539: nop
     540: checkcast     #88                 // class java/lang/Iterable
     543: astore        4
     545: nop
     546: iconst_0
     547: istore        5
     549: aload         4
     551: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     556: astore        6
     558: aload         6
     560: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     565: ifeq          786
     568: aload         6
     570: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     575: astore        7
     577: aload         7
     579: checkcast     #153                // class kotlin/Pair
     582: astore        8
     584: iconst_0
     585: istore        9
     587: aload         8
     589: invokevirtual #210                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     592: checkcast     #153                // class kotlin/Pair
     595: astore        10
     597: aload         8
     599: invokevirtual #213                // Method kotlin/Pair.component2:()Ljava/lang/Object;
     602: checkcast     #153                // class kotlin/Pair
     605: astore        11
     607: aload         10
     609: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     612: checkcast     #147                // class java/lang/Number
     615: invokevirtual #151                // Method java/lang/Number.intValue:()I
     618: aload         11
     620: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     623: checkcast     #147                // class java/lang/Number
     626: invokevirtual #151                // Method java/lang/Number.intValue:()I
     629: invokestatic  #216                // Method java/lang/Math.min:(II)I
     632: istore        12
     634: aload         10
     636: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     639: checkcast     #147                // class java/lang/Number
     642: invokevirtual #151                // Method java/lang/Number.intValue:()I
     645: aload         11
     647: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     650: checkcast     #147                // class java/lang/Number
     653: invokevirtual #151                // Method java/lang/Number.intValue:()I
     656: invokestatic  #204                // Method java/lang/Math.max:(II)I
     659: istore        13
     661: iload         12
     663: iload         13
     665: if_icmpgt     781
     668: aload         10
     670: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     673: checkcast     #147                // class java/lang/Number
     676: invokevirtual #151                // Method java/lang/Number.intValue:()I
     679: aload         11
     681: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     684: checkcast     #147                // class java/lang/Number
     687: invokevirtual #151                // Method java/lang/Number.intValue:()I
     690: invokestatic  #216                // Method java/lang/Math.min:(II)I
     693: istore        14
     695: aload         10
     697: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     700: checkcast     #147                // class java/lang/Number
     703: invokevirtual #151                // Method java/lang/Number.intValue:()I
     706: aload         11
     708: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     711: checkcast     #147                // class java/lang/Number
     714: invokevirtual #151                // Method java/lang/Number.intValue:()I
     717: invokestatic  #204                // Method java/lang/Math.max:(II)I
     720: istore        15
     722: iload         14
     724: iload         15
     726: if_icmpgt     768
     729: aload_3
     730: iload         12
     732: aaload
     733: astore        16
     735: iload         14
     737: istore        17
     739: aload         16
     741: iload         17
     743: iaload
     744: istore        18
     746: aload         16
     748: iload         17
     750: iload         18
     752: iconst_1
     753: iadd
     754: iastore
     755: iload         14
     757: iload         15
     759: if_icmpeq     768
     762: iinc          14, 1
     765: goto          729
     768: iload         12
     770: iload         13
     772: if_icmpeq     781
     775: iinc          12, 1
     778: goto          668
     781: nop
     782: nop
     783: goto          558
     786: nop
     787: aload_3
     788: checkcast     #218                // class "[Ljava/lang/Object;"
     791: astore        4
     793: iconst_0
     794: istore        5
     796: iconst_0
     797: istore        6
     799: aload         4
     801: arraylength
     802: istore        7
     804: iload         6
     806: iload         7
     808: if_icmpge     912
     811: aload         4
     813: iload         6
     815: aaload
     816: astore        8
     818: iload         5
     820: aload         8
     822: checkcast     #206                // class "[I"
     825: astore        9
     827: istore        19
     829: iconst_0
     830: istore        10
     832: aload         9
     834: astore        11
     836: iconst_0
     837: istore        12
     839: iconst_0
     840: istore        13
     842: iconst_0
     843: istore        14
     845: aload         11
     847: arraylength
     848: istore        15
     850: iload         14
     852: iload         15
     854: if_icmpge     894
     857: aload         11
     859: iload         14
     861: iaload
     862: istore        16
     864: iload         16
     866: istore        17
     868: iconst_0
     869: istore        18
     871: iload         17
     873: iconst_1
     874: if_icmple     881
     877: iconst_1
     878: goto          882
     881: iconst_0
     882: ifeq          888
     885: iinc          13, 1
     888: iinc          14, 1
     891: goto          850
     894: iload         13
     896: nop
     897: istore        20
     899: iload         19
     901: iload         20
     903: iadd
     904: istore        5
     906: iinc          6, 1
     909: goto          804
     912: iload         5
     914: ireturn

  private static final int main$part2(java.util.List<kotlin.Pair<kotlin.Pair<java.lang.Integer, java.lang.Integer>, kotlin.Pair<java.lang.Integer, java.lang.Integer>>>);
    Code:
       0: aload_0
       1: checkcast     #88                 // class java/lang/Iterable
       4: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
       9: astore_3
      10: aload_3
      11: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      16: ifne          27
      19: new           #191                // class java/util/NoSuchElementException
      22: dup
      23: invokespecial #192                // Method java/util/NoSuchElementException."<init>":()V
      26: athrow
      27: aload_3
      28: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      33: checkcast     #153                // class kotlin/Pair
      36: astore        4
      38: iconst_0
      39: istore        5
      41: aload         4
      43: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      46: checkcast     #153                // class kotlin/Pair
      49: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      52: checkcast     #147                // class java/lang/Number
      55: invokevirtual #151                // Method java/lang/Number.intValue:()I
      58: aload         4
      60: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
      63: checkcast     #153                // class kotlin/Pair
      66: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      69: checkcast     #147                // class java/lang/Number
      72: invokevirtual #151                // Method java/lang/Number.intValue:()I
      75: invokestatic  #204                // Method java/lang/Math.max:(II)I
      78: nop
      79: istore        4
      81: aload_3
      82: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      87: ifeq          158
      90: aload_3
      91: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: checkcast     #153                // class kotlin/Pair
      99: astore        5
     101: iconst_0
     102: istore        6
     104: aload         5
     106: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     109: checkcast     #153                // class kotlin/Pair
     112: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     115: checkcast     #147                // class java/lang/Number
     118: invokevirtual #151                // Method java/lang/Number.intValue:()I
     121: aload         5
     123: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     126: checkcast     #153                // class kotlin/Pair
     129: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     132: checkcast     #147                // class java/lang/Number
     135: invokevirtual #151                // Method java/lang/Number.intValue:()I
     138: invokestatic  #204                // Method java/lang/Math.max:(II)I
     141: nop
     142: istore        5
     144: iload         4
     146: iload         5
     148: if_icmpge     81
     151: iload         5
     153: istore        4
     155: goto          81
     158: iload         4
     160: istore_1
     161: aload_0
     162: checkcast     #88                 // class java/lang/Iterable
     165: invokeinterface #104,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     170: astore        4
     172: aload         4
     174: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     179: ifne          190
     182: new           #191                // class java/util/NoSuchElementException
     185: dup
     186: invokespecial #192                // Method java/util/NoSuchElementException."<init>":()V
     189: athrow
     190: aload         4
     192: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     197: checkcast     #153                // class kotlin/Pair
     200: astore        5
     202: iconst_0
     203: istore        6
     205: aload         5
     207: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     210: checkcast     #153                // class kotlin/Pair
     213: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     216: checkcast     #147                // class java/lang/Number
     219: invokevirtual #151                // Method java/lang/Number.intValue:()I
     222: aload         5
     224: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     227: checkcast     #153                // class kotlin/Pair
     230: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     233: checkcast     #147                // class java/lang/Number
     236: invokevirtual #151                // Method java/lang/Number.intValue:()I
     239: invokestatic  #204                // Method java/lang/Math.max:(II)I
     242: nop
     243: istore        5
     245: aload         4
     247: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     252: ifeq          324
     255: aload         4
     257: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     262: checkcast     #153                // class kotlin/Pair
     265: astore        6
     267: iconst_0
     268: istore        7
     270: aload         6
     272: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     275: checkcast     #153                // class kotlin/Pair
     278: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     281: checkcast     #147                // class java/lang/Number
     284: invokevirtual #151                // Method java/lang/Number.intValue:()I
     287: aload         6
     289: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     292: checkcast     #153                // class kotlin/Pair
     295: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     298: checkcast     #147                // class java/lang/Number
     301: invokevirtual #151                // Method java/lang/Number.intValue:()I
     304: invokestatic  #204                // Method java/lang/Math.max:(II)I
     307: nop
     308: istore        6
     310: iload         5
     312: iload         6
     314: if_icmpge     245
     317: iload         6
     319: istore        5
     321: goto          245
     324: iload         5
     326: istore_2
     327: iconst_0
     328: istore        4
     330: iload_1
     331: iconst_1
     332: iadd
     333: istore        5
     335: iload         5
     337: anewarray     #206                // class "[I"
     340: astore        6
     342: iload         4
     344: iload         5
     346: if_icmpge     369
     349: iload         4
     351: istore        7
     353: aload         6
     355: iload         7
     357: iload_2
     358: iconst_1
     359: iadd
     360: newarray       int
     362: aastore
     363: iinc          4, 1
     366: goto          342
     369: aload         6
     371: astore_3
     372: aload_0
     373: invokeinterface #247,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
     378: astore        4
     380: aload         4
     382: invokeinterface #110,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     387: ifeq          605
     390: aload         4
     392: invokeinterface #114,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     397: checkcast     #153                // class kotlin/Pair
     400: astore        5
     402: aload         5
     404: invokevirtual #210                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     407: checkcast     #153                // class kotlin/Pair
     410: astore        6
     412: aload         5
     414: invokevirtual #213                // Method kotlin/Pair.component2:()Ljava/lang/Object;
     417: checkcast     #153                // class kotlin/Pair
     420: astore        7
     422: aload         7
     424: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     427: checkcast     #147                // class java/lang/Number
     430: invokevirtual #151                // Method java/lang/Number.intValue:()I
     433: aload         6
     435: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     438: checkcast     #147                // class java/lang/Number
     441: invokevirtual #151                // Method java/lang/Number.intValue:()I
     444: isub
     445: invokestatic  #253                // Method kotlin/math/MathKt.getSign:(I)I
     448: istore        8
     450: aload         7
     452: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     455: checkcast     #147                // class java/lang/Number
     458: invokevirtual #151                // Method java/lang/Number.intValue:()I
     461: aload         6
     463: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     466: checkcast     #147                // class java/lang/Number
     469: invokevirtual #151                // Method java/lang/Number.intValue:()I
     472: isub
     473: invokestatic  #253                // Method kotlin/math/MathKt.getSign:(I)I
     476: istore        9
     478: aload         6
     480: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     483: checkcast     #147                // class java/lang/Number
     486: invokevirtual #151                // Method java/lang/Number.intValue:()I
     489: istore        10
     491: aload         6
     493: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     496: checkcast     #147                // class java/lang/Number
     499: invokevirtual #151                // Method java/lang/Number.intValue:()I
     502: istore        11
     504: aload_3
     505: iload         10
     507: aaload
     508: astore        12
     510: iload         11
     512: istore        13
     514: aload         12
     516: iload         13
     518: iaload
     519: istore        14
     521: aload         12
     523: iload         13
     525: iload         14
     527: iconst_1
     528: iadd
     529: iastore
     530: iload         10
     532: aload         7
     534: invokevirtual #195                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     537: checkcast     #147                // class java/lang/Number
     540: invokevirtual #151                // Method java/lang/Number.intValue:()I
     543: if_icmpne     562
     546: iload         11
     548: aload         7
     550: invokevirtual #198                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     553: checkcast     #147                // class java/lang/Number
     556: invokevirtual #151                // Method java/lang/Number.intValue:()I
     559: if_icmpeq     380
     562: iload         10
     564: iload         8
     566: iadd
     567: istore        10
     569: iload         11
     571: iload         9
     573: iadd
     574: istore        11
     576: aload_3
     577: iload         10
     579: aaload
     580: astore        15
     582: iload         11
     584: istore        16
     586: aload         15
     588: iload         16
     590: iaload
     591: istore        17
     593: aload         15
     595: iload         16
     597: iload         17
     599: iconst_1
     600: iadd
     601: iastore
     602: goto          530
     605: aload_3
     606: checkcast     #218                // class "[Ljava/lang/Object;"
     609: astore        4
     611: iconst_0
     612: istore        5
     614: iconst_0
     615: istore        6
     617: aload         4
     619: arraylength
     620: istore        7
     622: iload         6
     624: iload         7
     626: if_icmpge     730
     629: aload         4
     631: iload         6
     633: aaload
     634: astore        8
     636: iload         5
     638: aload         8
     640: checkcast     #206                // class "[I"
     643: astore        9
     645: istore        19
     647: iconst_0
     648: istore        10
     650: aload         9
     652: astore        11
     654: iconst_0
     655: istore        12
     657: iconst_0
     658: istore        13
     660: iconst_0
     661: istore        14
     663: aload         11
     665: arraylength
     666: istore        15
     668: iload         14
     670: iload         15
     672: if_icmpge     712
     675: aload         11
     677: iload         14
     679: iaload
     680: istore        16
     682: iload         16
     684: istore        17
     686: iconst_0
     687: istore        18
     689: iload         17
     691: iconst_1
     692: if_icmple     699
     695: iconst_1
     696: goto          700
     699: iconst_0
     700: ifeq          706
     703: iinc          13, 1
     706: iinc          14, 1
     709: goto          668
     712: iload         13
     714: nop
     715: istore        20
     717: iload         19
     719: iload         20
     721: iadd
     722: istore        5
     724: iinc          6, 1
     727: goto          622
     730: iload         5
     732: ireturn
}