package leetcode.problem0126

class WordLadder2 {
    fun findLadders(beginWord: String, endWord: String, wordList: List<String>): List<List<String>> {
        if (endWord !in wordList) return emptyList()

        val wordSet = setOf(beginWord) + wordList.toSet()
        val adjacentWordMap: HashMap<String, List<String>> = hashMapOf()
        wordSet.forEach { word ->
            adjacentWordMap[word] = wordSet.filter { it.isAdjacent(word) }
        }

        val queue = ArrayDeque<String>()
        val levelMap: HashMap<String, Int> = hashMapOf()
        val graph: HashMap<String, MutableSet<String>> = hashMapOf()

        levelMap[beginWord] = 0
        queue.add(beginWord)
        while (queue.isNotEmpty()) {
            val currentWord = queue.removeFirst()
            val currentLevel = levelMap[currentWord] ?: throw IllegalStateException()
            if (!graph.containsKey(currentWord)) {
                graph[currentWord] = mutableSetOf()
            }

            adjacentWordMap[currentWord]?.forEach {
                graph[currentWord]?.add(it)
                if (!levelMap.containsKey(it)) {
                    levelMap[it] = currentLevel + 1
                    queue.add(it)
                }
            }
        }

        if (!levelMap.containsKey(endWord)) {
            return emptyList()
        }

        val answerSet = mutableListOf<List<String>>()
        val stringPath = mutableListOf<String>()

        fun buildAnswer(word: String, level: Int) {
            if (word == beginWord) {
                answerSet.add(stringPath + listOf(word))
                return
            }
            stringPath.add(word)

            graph[word]?.forEach { nextWord ->
                if (levelMap[nextWord] != level - 1) return@forEach
                buildAnswer(nextWord, level - 1)
            }
            stringPath.removeLast()
        }

        buildAnswer(endWord, levelMap[endWord]!!)
        return answerSet.map { it.reversed() }
    }

    private fun String.isAdjacent(target: String): Boolean {
        if (this.length != target.length) return false
        var count = 0
        forEachIndexed { index, c ->
            if (target[index] != c) {
                count++
            }
        }
        return count == 1
    }
}

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

  public final java.util.List<java.util.List<java.lang.String>> findLadders(java.lang.String, java.lang.String, java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String beginWord
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #24                 // String endWord
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_3
      13: ldc           #26                 // String wordList
      15: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      18: aload_3
      19: aload_2
      20: invokeinterface #32,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
      25: ifne          32
      28: invokestatic  #38                 // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
      31: areturn
      32: aload_1
      33: invokestatic  #44                 // Method kotlin/collections/SetsKt.setOf:(Ljava/lang/Object;)Ljava/util/Set;
      36: aload_3
      37: checkcast     #46                 // class java/lang/Iterable
      40: invokestatic  #50                 // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
      43: checkcast     #46                 // class java/lang/Iterable
      46: invokestatic  #54                 // Method kotlin/collections/SetsKt.plus:(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set;
      49: astore        4
      51: new           #56                 // class java/util/HashMap
      54: dup
      55: invokespecial #57                 // Method java/util/HashMap."<init>":()V
      58: astore        5
      60: aload         4
      62: checkcast     #46                 // class java/lang/Iterable
      65: astore        6
      67: iconst_0
      68: istore        7
      70: aload         6
      72: invokeinterface #61,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      77: astore        8
      79: aload         8
      81: invokeinterface #67,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      86: ifeq          231
      89: aload         8
      91: invokeinterface #71,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      96: astore        9
      98: aload         9
     100: checkcast     #73                 // class java/lang/String
     103: astore        10
     105: iconst_0
     106: istore        11
     108: aload         5
     110: checkcast     #75                 // class java/util/Map
     113: astore        12
     115: aload         4
     117: checkcast     #46                 // class java/lang/Iterable
     120: astore        13
     122: iconst_0
     123: istore        14
     125: aload         13
     127: astore        15
     129: new           #77                 // class java/util/ArrayList
     132: dup
     133: invokespecial #78                 // Method java/util/ArrayList."<init>":()V
     136: checkcast     #80                 // class java/util/Collection
     139: astore        16
     141: iconst_0
     142: istore        17
     144: aload         15
     146: invokeinterface #61,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     151: astore        18
     153: aload         18
     155: invokeinterface #67,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     160: ifeq          206
     163: aload         18
     165: invokeinterface #71,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     170: astore        19
     172: aload         19
     174: checkcast     #73                 // class java/lang/String
     177: astore        20
     179: iconst_0
     180: istore        21
     182: aload_0
     183: aload         20
     185: aload         10
     187: invokespecial #84                 // Method isAdjacent:(Ljava/lang/String;Ljava/lang/String;)Z
     190: ifeq          153
     193: aload         16
     195: aload         19
     197: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     202: pop
     203: goto          153
     206: aload         16
     208: checkcast     #28                 // class java/util/List
     211: nop
     212: astore        13
     214: aload         12
     216: aload         10
     218: aload         13
     220: invokeinterface #91,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     225: pop
     226: nop
     227: nop
     228: goto          79
     231: nop
     232: new           #93                 // class kotlin/collections/ArrayDeque
     235: dup
     236: invokespecial #94                 // Method kotlin/collections/ArrayDeque."<init>":()V
     239: astore        6
     241: new           #56                 // class java/util/HashMap
     244: dup
     245: invokespecial #57                 // Method java/util/HashMap."<init>":()V
     248: astore        7
     250: new           #56                 // class java/util/HashMap
     253: dup
     254: invokespecial #57                 // Method java/util/HashMap."<init>":()V
     257: astore        8
     259: aload         7
     261: checkcast     #75                 // class java/util/Map
     264: aload_1
     265: iconst_0
     266: invokestatic  #100                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     269: invokeinterface #91,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     274: pop
     275: aload         6
     277: aload_1
     278: invokevirtual #101                // Method kotlin/collections/ArrayDeque.add:(Ljava/lang/Object;)Z
     281: pop
     282: aload         6
     284: checkcast     #80                 // class java/util/Collection
     287: invokeinterface #104,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     292: ifne          299
     295: iconst_1
     296: goto          300
     299: iconst_0
     300: ifeq          516
     303: aload         6
     305: invokevirtual #107                // Method kotlin/collections/ArrayDeque.removeFirst:()Ljava/lang/Object;
     308: checkcast     #73                 // class java/lang/String
     311: astore        9
     313: aload         7
     315: aload         9
     317: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     320: checkcast     #96                 // class java/lang/Integer
     323: dup
     324: ifnull        333
     327: invokevirtual #115                // Method java/lang/Integer.intValue:()I
     330: goto          342
     333: pop
     334: new           #117                // class java/lang/IllegalStateException
     337: dup
     338: invokespecial #118                // Method java/lang/IllegalStateException."<init>":()V
     341: athrow
     342: istore        10
     344: aload         8
     346: aload         9
     348: invokevirtual #121                // Method java/util/HashMap.containsKey:(Ljava/lang/Object;)Z
     351: ifne          378
     354: nop
     355: aload         8
     357: checkcast     #75                 // class java/util/Map
     360: aload         9
     362: new           #123                // class java/util/LinkedHashSet
     365: dup
     366: invokespecial #124                // Method java/util/LinkedHashSet."<init>":()V
     369: checkcast     #126                // class java/util/Set
     372: invokeinterface #91,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     377: pop
     378: aload         5
     380: aload         9
     382: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     385: checkcast     #28                 // class java/util/List
     388: dup
     389: ifnull        511
     392: checkcast     #46                 // class java/lang/Iterable
     395: astore        12
     397: iconst_0
     398: istore        13
     400: aload         12
     402: invokeinterface #61,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     407: astore        14
     409: aload         14
     411: invokeinterface #67,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     416: ifeq          507
     419: aload         14
     421: invokeinterface #71,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     426: astore        15
     428: aload         15
     430: checkcast     #73                 // class java/lang/String
     433: astore        16
     435: iconst_0
     436: istore        17
     438: aload         8
     440: aload         9
     442: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     445: checkcast     #126                // class java/util/Set
     448: dup
     449: ifnull        463
     452: aload         16
     454: invokeinterface #127,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     459: pop
     460: goto          464
     463: pop
     464: aload         7
     466: aload         16
     468: invokevirtual #121                // Method java/util/HashMap.containsKey:(Ljava/lang/Object;)Z
     471: ifne          502
     474: aload         7
     476: checkcast     #75                 // class java/util/Map
     479: aload         16
     481: iload         10
     483: iconst_1
     484: iadd
     485: invokestatic  #100                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     488: invokeinterface #91,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     493: pop
     494: aload         6
     496: aload         16
     498: invokevirtual #101                // Method kotlin/collections/ArrayDeque.add:(Ljava/lang/Object;)Z
     501: pop
     502: nop
     503: nop
     504: goto          409
     507: nop
     508: goto          282
     511: pop
     512: nop
     513: goto          282
     516: aload         7
     518: aload_2
     519: invokevirtual #121                // Method java/util/HashMap.containsKey:(Ljava/lang/Object;)Z
     522: ifne          529
     525: invokestatic  #38                 // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     528: areturn
     529: new           #77                 // class java/util/ArrayList
     532: dup
     533: invokespecial #78                 // Method java/util/ArrayList."<init>":()V
     536: checkcast     #28                 // class java/util/List
     539: astore        9
     541: new           #77                 // class java/util/ArrayList
     544: dup
     545: invokespecial #78                 // Method java/util/ArrayList."<init>":()V
     548: checkcast     #28                 // class java/util/List
     551: astore        10
     553: aload_1
     554: aload         9
     556: aload         10
     558: aload         8
     560: aload         7
     562: aload_2
     563: aload         7
     565: aload_2
     566: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     569: dup
     570: invokestatic  #131                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     573: checkcast     #133                // class java/lang/Number
     576: invokevirtual #134                // Method java/lang/Number.intValue:()I
     579: invokestatic  #138                // Method findLadders$buildAnswer:(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/HashMap;Ljava/util/HashMap;Ljava/lang/String;I)V
     582: aload         9
     584: checkcast     #46                 // class java/lang/Iterable
     587: astore        11
     589: iconst_0
     590: istore        12
     592: aload         11
     594: astore        13
     596: new           #77                 // class java/util/ArrayList
     599: dup
     600: aload         11
     602: bipush        10
     604: invokestatic  #142                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     607: invokespecial #145                // Method java/util/ArrayList."<init>":(I)V
     610: checkcast     #80                 // class java/util/Collection
     613: astore        14
     615: iconst_0
     616: istore        15
     618: aload         13
     620: invokeinterface #61,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     625: astore        16
     627: aload         16
     629: invokeinterface #67,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     634: ifeq          680
     637: aload         16
     639: invokeinterface #71,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     644: astore        17
     646: aload         14
     648: aload         17
     650: checkcast     #28                 // class java/util/List
     653: astore        18
     655: astore        22
     657: iconst_0
     658: istore        19
     660: aload         18
     662: checkcast     #46                 // class java/lang/Iterable
     665: invokestatic  #149                // Method kotlin/collections/CollectionsKt.reversed:(Ljava/lang/Iterable;)Ljava/util/List;
     668: aload         22
     670: swap
     671: invokeinterface #87,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     676: pop
     677: goto          627
     680: aload         14
     682: checkcast     #28                 // class java/util/List
     685: nop
     686: areturn

  private final boolean isAdjacent(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: invokevirtual #190                // Method java/lang/String.length:()I
       4: aload_2
       5: invokevirtual #190                // Method java/lang/String.length:()I
       8: if_icmpeq     13
      11: iconst_0
      12: ireturn
      13: iconst_0
      14: istore_3
      15: aload_1
      16: checkcast     #192                // class java/lang/CharSequence
      19: astore        4
      21: iconst_0
      22: istore        5
      24: iconst_0
      25: istore        6
      27: iconst_0
      28: istore        7
      30: iload         7
      32: aload         4
      34: invokeinterface #193,  1          // InterfaceMethod java/lang/CharSequence.length:()I
      39: if_icmpge     90
      42: aload         4
      44: iload         7
      46: invokeinterface #197,  2          // InterfaceMethod java/lang/CharSequence.charAt:(I)C
      51: istore        8
      53: iload         6
      55: iinc          6, 1
      58: iload         8
      60: istore        9
      62: istore        10
      64: iconst_0
      65: istore        11
      67: aload_2
      68: iload         10
      70: invokevirtual #198                // Method java/lang/String.charAt:(I)C
      73: iload         9
      75: if_icmpeq     82
      78: iload_3
      79: iconst_1
      80: iadd
      81: istore_3
      82: nop
      83: nop
      84: iinc          7, 1
      87: goto          30
      90: nop
      91: iload_3
      92: iconst_1
      93: if_icmpne     100
      96: iconst_1
      97: goto          101
     100: iconst_0
     101: ireturn

  private static final void findLadders$buildAnswer(java.lang.String, java.util.List<java.util.List<java.lang.String>>, java.util.List<java.lang.String>, java.util.HashMap<java.lang.String, java.util.Set<java.lang.String>>, java.util.HashMap<java.lang.String, java.lang.Integer>, java.lang.String, int);
    Code:
       0: aload         5
       2: aload_0
       3: invokestatic  #215                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
       6: ifeq          32
       9: aload_1
      10: aload_2
      11: checkcast     #80                 // class java/util/Collection
      14: aload         5
      16: invokestatic  #219                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
      19: checkcast     #46                 // class java/lang/Iterable
      22: invokestatic  #222                // Method kotlin/collections/CollectionsKt.plus:(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;
      25: invokeinterface #223,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
      30: pop
      31: return
      32: aload_2
      33: aload         5
      35: invokeinterface #223,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
      40: pop
      41: aload_3
      42: aload         5
      44: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
      47: checkcast     #126                // class java/util/Set
      50: dup
      51: ifnull        159
      54: checkcast     #46                 // class java/lang/Iterable
      57: astore        7
      59: iconst_0
      60: istore        8
      62: aload         7
      64: invokeinterface #61,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      69: astore        9
      71: aload         9
      73: invokeinterface #67,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      78: ifeq          155
      81: aload         9
      83: invokeinterface #71,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      88: astore        10
      90: aload         10
      92: checkcast     #73                 // class java/lang/String
      95: astore        11
      97: iconst_0
      98: istore        12
     100: aload         4
     102: aload         11
     104: invokevirtual #111                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     107: checkcast     #96                 // class java/lang/Integer
     110: iload         6
     112: iconst_1
     113: isub
     114: istore        13
     116: dup
     117: ifnonnull     124
     120: pop
     121: goto          151
     124: invokevirtual #115                // Method java/lang/Integer.intValue:()I
     127: iload         13
     129: if_icmpeq     135
     132: goto          151
     135: aload_0
     136: aload_1
     137: aload_2
     138: aload_3
     139: aload         4
     141: aload         11
     143: iload         6
     145: iconst_1
     146: isub
     147: invokestatic  #138                // Method findLadders$buildAnswer:(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/HashMap;Ljava/util/HashMap;Ljava/lang/String;I)V
     150: nop
     151: nop
     152: goto          71
     155: nop
     156: goto          161
     159: pop
     160: nop
     161: aload_2
     162: invokeinterface #226,  1          // InterfaceMethod java/util/List.removeLast:()Ljava/lang/Object;
     167: pop
     168: return
}


package leetcode.problem0120

import kotlin.math.min

class Triangle {
    fun minimumTotal(triangle: List<List<Int>>): Int =
        when (triangle.size) {
            1 -> triangle[0][0]
            else -> {
                val array = Array(triangle.size) { intArrayOf() }
                array[0] = intArrayOf(triangle[0][0])
                (1..triangle.lastIndex).forEach {
                    array[it] = IntArray(it + 1)
                    (0..array[it].lastIndex).forEach { index ->
                        array[it][index] = triangle[it][index] + when (index) {
                            0 -> array[it - 1][index]
                            array[it].lastIndex -> array[it - 1][index - 1]
                            else -> min(array[it - 1][index], array[it - 1][index - 1])
                        }
                    }
                }
                array[triangle.lastIndex].findMin()
            }
        }

    private fun IntArray.findMin(): Int {
        var minValue = this[0]
        for (i in 1..lastIndex) {
            val v = this[i]
            if (minValue > v) {
                minValue = v
            }
        }
        return minValue
    }
}

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

  public final int minimumTotal(java.util.List<? extends java.util.List<java.lang.Integer>>);
    Code:
       0: aload_1
       1: ldc           #16                 // String triangle
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokeinterface #28,  1           // InterfaceMethod java/util/List.size:()I
      12: iconst_1
      13: if_icmpne     41
      16: aload_1
      17: iconst_0
      18: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      23: checkcast     #24                 // class java/util/List
      26: iconst_0
      27: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      32: checkcast     #34                 // class java/lang/Number
      35: invokevirtual #37                 // Method java/lang/Number.intValue:()I
      38: goto          364
      41: iconst_0
      42: istore_3
      43: aload_1
      44: invokeinterface #28,  1           // InterfaceMethod java/util/List.size:()I
      49: istore        4
      51: iload         4
      53: anewarray     #39                 // class "[I"
      56: astore        5
      58: iload_3
      59: iload         4
      61: if_icmpge     81
      64: iload_3
      65: istore        6
      67: aload         5
      69: iload         6
      71: iconst_0
      72: newarray       int
      74: aastore
      75: iinc          3, 1
      78: goto          58
      81: aload         5
      83: astore_2
      84: aload_2
      85: iconst_0
      86: iconst_1
      87: newarray       int
      89: astore_3
      90: aload_3
      91: iconst_0
      92: aload_1
      93: iconst_0
      94: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      99: checkcast     #24                 // class java/util/List
     102: iconst_0
     103: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     108: checkcast     #34                 // class java/lang/Number
     111: invokevirtual #37                 // Method java/lang/Number.intValue:()I
     114: iastore
     115: aload_3
     116: aastore
     117: new           #41                 // class kotlin/ranges/IntRange
     120: dup
     121: iconst_1
     122: aload_1
     123: invokestatic  #46                 // Method kotlin/collections/CollectionsKt.getLastIndex:(Ljava/util/List;)I
     126: invokespecial #49                 // Method kotlin/ranges/IntRange."<init>":(II)V
     129: checkcast     #51                 // class java/lang/Iterable
     132: astore_3
     133: iconst_0
     134: istore        4
     136: aload_3
     137: invokeinterface #55,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     142: astore        5
     144: aload         5
     146: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     151: ifeq          353
     154: aload         5
     156: checkcast     #63                 // class kotlin/collections/IntIterator
     159: invokevirtual #66                 // Method kotlin/collections/IntIterator.nextInt:()I
     162: istore        6
     164: iload         6
     166: istore        7
     168: iconst_0
     169: istore        8
     171: aload_2
     172: iload         7
     174: iload         7
     176: iconst_1
     177: iadd
     178: newarray       int
     180: aastore
     181: new           #41                 // class kotlin/ranges/IntRange
     184: dup
     185: iconst_0
     186: aload_2
     187: iload         7
     189: aaload
     190: invokestatic  #71                 // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
     193: invokespecial #49                 // Method kotlin/ranges/IntRange."<init>":(II)V
     196: checkcast     #51                 // class java/lang/Iterable
     199: astore        9
     201: iconst_0
     202: istore        10
     204: aload         9
     206: invokeinterface #55,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     211: astore        11
     213: aload         11
     215: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     220: ifeq          347
     223: aload         11
     225: checkcast     #63                 // class kotlin/collections/IntIterator
     228: invokevirtual #66                 // Method kotlin/collections/IntIterator.nextInt:()I
     231: istore        12
     233: iload         12
     235: istore        13
     237: iconst_0
     238: istore        14
     240: aload_2
     241: iload         7
     243: aaload
     244: iload         13
     246: aload_1
     247: iload         7
     249: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     254: checkcast     #24                 // class java/util/List
     257: iload         13
     259: invokeinterface #32,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     264: checkcast     #34                 // class java/lang/Number
     267: invokevirtual #37                 // Method java/lang/Number.intValue:()I
     270: iload         13
     272: istore        15
     274: iload         15
     276: ifne          291
     279: aload_2
     280: iload         7
     282: iconst_1
     283: isub
     284: aaload
     285: iload         13
     287: iaload
     288: goto          340
     291: iload         15
     293: aload_2
     294: iload         7
     296: aaload
     297: invokestatic  #71                 // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
     300: if_icmpne     317
     303: aload_2
     304: iload         7
     306: iconst_1
     307: isub
     308: aaload
     309: iload         13
     311: iconst_1
     312: isub
     313: iaload
     314: goto          340
     317: aload_2
     318: iload         7
     320: iconst_1
     321: isub
     322: aaload
     323: iload         13
     325: iaload
     326: aload_2
     327: iload         7
     329: iconst_1
     330: isub
     331: aaload
     332: iload         13
     334: iconst_1
     335: isub
     336: iaload
     337: invokestatic  #77                 // Method java/lang/Math.min:(II)I
     340: iadd
     341: iastore
     342: nop
     343: nop
     344: goto          213
     347: nop
     348: nop
     349: nop
     350: goto          144
     353: nop
     354: aload_0
     355: aload_2
     356: aload_1
     357: invokestatic  #46                 // Method kotlin/collections/CollectionsKt.getLastIndex:(Ljava/util/List;)I
     360: aaload
     361: invokespecial #80                 // Method findMin:([I)I
     364: ireturn

  private final int findMin(int[]);
    Code:
       0: aload_1
       1: iconst_0
       2: iaload
       3: istore_2
       4: iconst_1
       5: istore_3
       6: aload_1
       7: invokestatic  #71                 // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
      10: istore        4
      12: iload_3
      13: iload         4
      15: if_icmpgt     44
      18: aload_1
      19: iload_3
      20: iaload
      21: istore        5
      23: iload_2
      24: iload         5
      26: if_icmple     32
      29: iload         5
      31: istore_2
      32: iload_3
      33: iload         4
      35: if_icmpeq     44
      38: iinc          3, 1
      41: goto          18
      44: iload_2
      45: ireturn
}


package leetcode.problem0052

class NQueens2 {
    fun totalNQueens(n: Int): Int {
        val board = Array(n) { BooleanArray(n) { false } }

        return solve(board, 0)
    }

    private fun solve(board: Array<BooleanArray>, row: Int): Int {
        if (row == board.size) {
            return 1
        }
        var count = 0

        board[row].indices.forEach { column ->
            if (canPlace(board, row, column)) {
                board[row][column] = true
                count += solve(board, row + 1)
                board[row][column] = false
            }
        }
        return count
    }

    private fun canPlace(board: Array<BooleanArray>, row: Int, column: Int): Boolean {
        if (board[row].any { it }) {
            return false
        }
        if (board.map { it[column] }.any { it }) {
            return false
        }
        val leftDiagonal = (0 until row).mapNotNull {
            val diff = column - row
            if (it + diff >= 0 && it + diff <= board.lastIndex) board[it][it + diff] else null
        }
        if (leftDiagonal.any { it }) {
            return false
        }
        val rightDiagonal = (0 until row).mapNotNull {
            val sum = row + column
            if (it <= sum && sum - it <= board.lastIndex) board[it][sum - it] else null
        }
        if (rightDiagonal.any { it }) {
            return false
        }
        return true
    }
}

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

  public final int totalNQueens(int);
    Code:
       0: iconst_0
       1: istore_3
       2: iload_1
       3: anewarray     #14                 // class "[Z"
       6: astore        4
       8: iload_3
       9: iload_1
      10: if_icmpge     67
      13: iload_3
      14: istore        5
      16: aload         4
      18: iload         5
      20: iconst_0
      21: istore        6
      23: iload_1
      24: newarray       boolean
      26: astore        7
      28: istore        10
      30: astore        9
      32: iload         6
      34: iload_1
      35: if_icmpge     54
      38: iload         6
      40: istore        8
      42: aload         7
      44: iload         8
      46: iconst_0
      47: bastore
      48: iinc          6, 1
      51: goto          32
      54: aload         9
      56: iload         10
      58: aload         7
      60: aastore
      61: iinc          3, 1
      64: goto          8
      67: aload         4
      69: astore_2
      70: aload_0
      71: aload_2
      72: iconst_0
      73: invokespecial #18                 // Method solve:([[ZI)I
      76: ireturn

  private final int solve(boolean[][], int);
    Code:
       0: iload_2
       1: aload_1
       2: checkcast     #25                 // class "[Ljava/lang/Object;"
       5: arraylength
       6: if_icmpne     11
       9: iconst_1
      10: ireturn
      11: iconst_0
      12: istore_3
      13: aload_1
      14: iload_2
      15: aaload
      16: invokestatic  #31                 // Method kotlin/collections/ArraysKt.getIndices:([Z)Lkotlin/ranges/IntRange;
      19: checkcast     #33                 // class java/lang/Iterable
      22: astore        4
      24: iconst_0
      25: istore        5
      27: aload         4
      29: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      34: astore        6
      36: aload         6
      38: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      43: ifeq          104
      46: aload         6
      48: checkcast     #45                 // class kotlin/collections/IntIterator
      51: invokevirtual #49                 // Method kotlin/collections/IntIterator.nextInt:()I
      54: istore        7
      56: iload         7
      58: istore        8
      60: iconst_0
      61: istore        9
      63: aload_0
      64: aload_1
      65: iload_2
      66: iload         8
      68: invokespecial #53                 // Method canPlace:([[ZII)Z
      71: ifeq          99
      74: aload_1
      75: iload_2
      76: aaload
      77: iload         8
      79: iconst_1
      80: bastore
      81: iload_3
      82: aload_0
      83: aload_1
      84: iload_2
      85: iconst_1
      86: iadd
      87: invokespecial #18                 // Method solve:([[ZI)I
      90: iadd
      91: istore_3
      92: aload_1
      93: iload_2
      94: aaload
      95: iload         8
      97: iconst_0
      98: bastore
      99: nop
     100: nop
     101: goto          36
     104: nop
     105: iload_3
     106: ireturn

  private final boolean canPlace(boolean[][], int, int);
    Code:
       0: aload_1
       1: iload_2
       2: aaload
       3: astore        4
       5: iconst_0
       6: istore        5
       8: iconst_0
       9: istore        6
      11: aload         4
      13: arraylength
      14: istore        7
      16: iload         6
      18: iload         7
      20: if_icmpge     52
      23: aload         4
      25: iload         6
      27: baload
      28: istore        8
      30: iload         8
      32: istore        9
      34: iconst_0
      35: istore        10
      37: iload         9
      39: ifeq          46
      42: iconst_1
      43: goto          53
      46: iinc          6, 1
      49: goto          16
      52: iconst_0
      53: ifeq          58
      56: iconst_0
      57: ireturn
      58: aload_1
      59: checkcast     #25                 // class "[Ljava/lang/Object;"
      62: astore        4
      64: iconst_0
      65: istore        5
      67: aload         4
      69: astore        6
      71: new           #63                 // class java/util/ArrayList
      74: dup
      75: aload         4
      77: arraylength
      78: invokespecial #66                 // Method java/util/ArrayList."<init>":(I)V
      81: checkcast     #68                 // class java/util/Collection
      84: astore        7
      86: iconst_0
      87: istore        8
      89: iconst_0
      90: istore        9
      92: aload         6
      94: arraylength
      95: istore        10
      97: iload         9
      99: iload         10
     101: if_icmpge     147
     104: aload         6
     106: iload         9
     108: aaload
     109: astore        11
     111: aload         7
     113: aload         11
     115: checkcast     #14                 // class "[Z"
     118: astore        12
     120: astore        22
     122: iconst_0
     123: istore        13
     125: aload         12
     127: iload_3
     128: baload
     129: invokestatic  #74                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
     132: aload         22
     134: swap
     135: invokeinterface #78,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     140: pop
     141: iinc          9, 1
     144: goto          97
     147: aload         7
     149: checkcast     #80                 // class java/util/List
     152: nop
     153: checkcast     #33                 // class java/lang/Iterable
     156: astore        4
     158: iconst_0
     159: istore        5
     161: aload         4
     163: instanceof    #68                 // class java/util/Collection
     166: ifeq          186
     169: aload         4
     171: checkcast     #68                 // class java/util/Collection
     174: invokeinterface #83,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
     179: ifeq          186
     182: iconst_0
     183: goto          237
     186: aload         4
     188: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     193: astore        6
     195: aload         6
     197: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     202: ifeq          236
     205: aload         6
     207: invokeinterface #87,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     212: astore        7
     214: aload         7
     216: checkcast     #70                 // class java/lang/Boolean
     219: invokevirtual #90                 // Method java/lang/Boolean.booleanValue:()Z
     222: istore        8
     224: iconst_0
     225: istore        9
     227: iload         8
     229: ifeq          195
     232: iconst_1
     233: goto          237
     236: iconst_0
     237: ifeq          242
     240: iconst_0
     241: ireturn
     242: iconst_0
     243: iload_2
     244: invokestatic  #96                 // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
     247: checkcast     #33                 // class java/lang/Iterable
     250: astore        5
     252: iconst_0
     253: istore        6
     255: aload         5
     257: astore        7
     259: new           #63                 // class java/util/ArrayList
     262: dup
     263: invokespecial #97                 // Method java/util/ArrayList."<init>":()V
     266: checkcast     #68                 // class java/util/Collection
     269: astore        8
     271: iconst_0
     272: istore        9
     274: aload         7
     276: astore        10
     278: iconst_0
     279: istore        11
     281: aload         10
     283: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     288: astore        12
     290: aload         12
     292: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     297: ifeq          396
     300: aload         12
     302: checkcast     #45                 // class kotlin/collections/IntIterator
     305: invokevirtual #49                 // Method kotlin/collections/IntIterator.nextInt:()I
     308: istore        13
     310: iload         13
     312: istore        14
     314: iconst_0
     315: istore        15
     317: iload         14
     319: istore        16
     321: iconst_0
     322: istore        17
     324: iload_3
     325: iload_2
     326: isub
     327: istore        18
     329: iload         16
     331: iload         18
     333: iadd
     334: iflt          368
     337: iload         16
     339: iload         18
     341: iadd
     342: aload_1
     343: checkcast     #25                 // class "[Ljava/lang/Object;"
     346: invokestatic  #101                // Method kotlin/collections/ArraysKt.getLastIndex:([Ljava/lang/Object;)I
     349: if_icmpgt     368
     352: aload_1
     353: iload         16
     355: aaload
     356: iload         16
     358: iload         18
     360: iadd
     361: baload
     362: invokestatic  #74                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
     365: goto          369
     368: aconst_null
     369: dup
     370: ifnull        391
     373: astore        19
     375: iconst_0
     376: istore        20
     378: aload         8
     380: aload         19
     382: invokeinterface #78,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     387: pop
     388: goto          392
     391: pop
     392: nop
     393: goto          290
     396: nop
     397: aload         8
     399: checkcast     #80                 // class java/util/List
     402: nop
     403: astore        4
     405: aload         4
     407: checkcast     #33                 // class java/lang/Iterable
     410: astore        5
     412: iconst_0
     413: istore        6
     415: aload         5
     417: instanceof    #68                 // class java/util/Collection
     420: ifeq          440
     423: aload         5
     425: checkcast     #68                 // class java/util/Collection
     428: invokeinterface #83,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
     433: ifeq          440
     436: iconst_0
     437: goto          491
     440: aload         5
     442: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     447: astore        7
     449: aload         7
     451: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     456: ifeq          490
     459: aload         7
     461: invokeinterface #87,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     466: astore        8
     468: aload         8
     470: checkcast     #70                 // class java/lang/Boolean
     473: invokevirtual #90                 // Method java/lang/Boolean.booleanValue:()Z
     476: istore        9
     478: iconst_0
     479: istore        10
     481: iload         9
     483: ifeq          449
     486: iconst_1
     487: goto          491
     490: iconst_0
     491: ifeq          496
     494: iconst_0
     495: ireturn
     496: iconst_0
     497: iload_2
     498: invokestatic  #96                 // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
     501: checkcast     #33                 // class java/lang/Iterable
     504: astore        6
     506: iconst_0
     507: istore        7
     509: aload         6
     511: astore        8
     513: new           #63                 // class java/util/ArrayList
     516: dup
     517: invokespecial #97                 // Method java/util/ArrayList."<init>":()V
     520: checkcast     #68                 // class java/util/Collection
     523: astore        9
     525: iconst_0
     526: istore        10
     528: aload         8
     530: astore        11
     532: iconst_0
     533: istore        12
     535: aload         11
     537: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     542: astore        13
     544: aload         13
     546: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     551: ifeq          649
     554: aload         13
     556: checkcast     #45                 // class kotlin/collections/IntIterator
     559: invokevirtual #49                 // Method kotlin/collections/IntIterator.nextInt:()I
     562: istore        14
     564: iload         14
     566: istore        15
     568: iconst_0
     569: istore        16
     571: iload         15
     573: istore        17
     575: iconst_0
     576: istore        18
     578: iload_2
     579: iload_3
     580: iadd
     581: istore        19
     583: iload         17
     585: iload         19
     587: if_icmpgt     621
     590: iload         19
     592: iload         17
     594: isub
     595: aload_1
     596: checkcast     #25                 // class "[Ljava/lang/Object;"
     599: invokestatic  #101                // Method kotlin/collections/ArraysKt.getLastIndex:([Ljava/lang/Object;)I
     602: if_icmpgt     621
     605: aload_1
     606: iload         17
     608: aaload
     609: iload         19
     611: iload         17
     613: isub
     614: baload
     615: invokestatic  #74                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
     618: goto          622
     621: aconst_null
     622: dup
     623: ifnull        644
     626: astore        20
     628: iconst_0
     629: istore        21
     631: aload         9
     633: aload         20
     635: invokeinterface #78,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     640: pop
     641: goto          645
     644: pop
     645: nop
     646: goto          544
     649: nop
     650: aload         9
     652: checkcast     #80                 // class java/util/List
     655: nop
     656: astore        5
     658: aload         5
     660: checkcast     #33                 // class java/lang/Iterable
     663: astore        6
     665: iconst_0
     666: istore        7
     668: aload         6
     670: instanceof    #68                 // class java/util/Collection
     673: ifeq          693
     676: aload         6
     678: checkcast     #68                 // class java/util/Collection
     681: invokeinterface #83,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
     686: ifeq          693
     689: iconst_0
     690: goto          744
     693: aload         6
     695: invokeinterface #37,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     700: astore        8
     702: aload         8
     704: invokeinterface #43,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     709: ifeq          743
     712: aload         8
     714: invokeinterface #87,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     719: astore        9
     721: aload         9
     723: checkcast     #70                 // class java/lang/Boolean
     726: invokevirtual #90                 // Method java/lang/Boolean.booleanValue:()Z
     729: istore        10
     731: iconst_0
     732: istore        11
     734: iload         10
     736: ifeq          702
     739: iconst_1
     740: goto          744
     743: iconst_0
     744: ifeq          749
     747: iconst_0
     748: ireturn
     749: iconst_1
     750: ireturn
}


package leetcode.problem0047

class Permutations2 {
    fun permuteUnique(nums: IntArray): List<List<Int>> {
        val hashMap = hashMapOf<Int, Int>()
        nums.forEach {
            hashMap[it] = if (hashMap.containsKey(it)) {
                requireNotNull(hashMap[it]) + 1
            } else {
                1
            }
        }

        return permute(hashMap)
    }

    private fun permute(hashMap: HashMap<Int, Int>): List<List<Int>> =
        if (hashMap.values.filter { it > 0 }.size == 1) {
            val tmp = hashMap.filterValues { it > 0 }
            listOf(IntArray(tmp.values.first()) { tmp.keys.first() }.toList())
        } else {
            hashMap.flatMap { (key, value) ->
                if (value == 0) {
                    return@flatMap emptyList<List<Int>>()
                }
                hashMap[key] = value - 1
                try {
                    permute(hashMap).map {
                        val tmpList = mutableListOf<Int>()
                        tmpList.add(key)
                        tmpList.addAll(it)
                        tmpList
                    }
                } finally {
                    hashMap[key] = value
                }
            }
        }
}

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

  public final java.util.List<java.util.List<java.lang.Integer>> permuteUnique(int[]);
    Code:
       0: aload_1
       1: ldc           #16                 // String nums
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #24                 // class java/util/HashMap
       9: dup
      10: invokespecial #25                 // Method java/util/HashMap."<init>":()V
      13: astore_2
      14: aload_1
      15: astore_3
      16: iconst_0
      17: istore        4
      19: iconst_0
      20: istore        5
      22: aload_3
      23: arraylength
      24: istore        6
      26: iload         5
      28: iload         6
      30: if_icmpge     139
      33: aload_3
      34: iload         5
      36: iaload
      37: istore        7
      39: iload         7
      41: istore        8
      43: iconst_0
      44: istore        9
      46: aload_2
      47: checkcast     #27                 // class java/util/Map
      50: astore        10
      52: iload         8
      54: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      57: astore        11
      59: aload_2
      60: iload         8
      62: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      65: invokevirtual #37                 // Method java/util/HashMap.containsKey:(Ljava/lang/Object;)Z
      68: ifeq          113
      71: aload_2
      72: iload         8
      74: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      77: invokevirtual #41                 // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
      80: dup
      81: ifnonnull     102
      84: pop
      85: ldc           #43                 // String Required value was null.
      87: astore        12
      89: new           #45                 // class java/lang/IllegalArgumentException
      92: dup
      93: aload         12
      95: invokevirtual #49                 // Method java/lang/Object.toString:()Ljava/lang/String;
      98: invokespecial #52                 // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     101: athrow
     102: checkcast     #54                 // class java/lang/Number
     105: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     108: iconst_1
     109: iadd
     110: goto          114
     113: iconst_1
     114: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     117: astore        13
     119: aload         10
     121: aload         11
     123: aload         13
     125: invokeinterface #62,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     130: pop
     131: nop
     132: nop
     133: iinc          5, 1
     136: goto          26
     139: nop
     140: aload_0
     141: aload_2
     142: invokespecial #66                 // Method permute:(Ljava/util/HashMap;)Ljava/util/List;
     145: areturn

  private final java.util.List<java.util.List<java.lang.Integer>> permute(java.util.HashMap<java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_1
       1: invokevirtual #81                 // Method java/util/HashMap.values:()Ljava/util/Collection;
       4: dup
       5: ldc           #83                 // String <get-values>(...)
       7: invokestatic  #86                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      10: checkcast     #88                 // class java/lang/Iterable
      13: astore_2
      14: iconst_0
      15: istore_3
      16: aload_2
      17: astore        4
      19: new           #90                 // class java/util/ArrayList
      22: dup
      23: invokespecial #91                 // Method java/util/ArrayList."<init>":()V
      26: checkcast     #93                 // class java/util/Collection
      29: astore        5
      31: iconst_0
      32: istore        6
      34: aload         4
      36: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      41: astore        7
      43: aload         7
      45: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      50: ifeq          101
      53: aload         7
      55: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      60: astore        8
      62: aload         8
      64: checkcast     #29                 // class java/lang/Integer
      67: astore        9
      69: iconst_0
      70: istore        10
      72: aload         9
      74: invokevirtual #108                // Method java/lang/Integer.intValue:()I
      77: ifle          84
      80: iconst_1
      81: goto          85
      84: iconst_0
      85: ifeq          43
      88: aload         5
      90: aload         8
      92: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
      97: pop
      98: goto          43
     101: aload         5
     103: checkcast     #113                // class java/util/List
     106: nop
     107: invokeinterface #116,  1          // InterfaceMethod java/util/List.size:()I
     112: iconst_1
     113: if_icmpne     305
     116: aload_1
     117: checkcast     #27                 // class java/util/Map
     120: astore_3
     121: iconst_0
     122: istore        4
     124: new           #118                // class java/util/LinkedHashMap
     127: dup
     128: invokespecial #119                // Method java/util/LinkedHashMap."<init>":()V
     131: astore        5
     133: aload_3
     134: invokeinterface #123,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     139: invokeinterface #126,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     144: astore        6
     146: aload         6
     148: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     153: ifeq          222
     156: aload         6
     158: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     163: checkcast     #128                // class java/util/Map$Entry
     166: astore        7
     168: aload         7
     170: invokeinterface #131,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     175: checkcast     #54                 // class java/lang/Number
     178: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     181: istore        8
     183: iconst_0
     184: istore        9
     186: iload         8
     188: ifle          195
     191: iconst_1
     192: goto          196
     195: iconst_0
     196: ifeq          146
     199: aload         5
     201: aload         7
     203: invokeinterface #134,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     208: aload         7
     210: invokeinterface #131,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     215: invokevirtual #135                // Method java/util/LinkedHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     218: pop
     219: goto          146
     222: aload         5
     224: checkcast     #27                 // class java/util/Map
     227: astore_2
     228: iconst_0
     229: istore_3
     230: aload_2
     231: invokeinterface #136,  1          // InterfaceMethod java/util/Map.values:()Ljava/util/Collection;
     236: checkcast     #88                 // class java/lang/Iterable
     239: invokestatic  #142                // Method kotlin/collections/CollectionsKt.first:(Ljava/lang/Iterable;)Ljava/lang/Object;
     242: checkcast     #54                 // class java/lang/Number
     245: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     248: istore        4
     250: iload         4
     252: newarray       int
     254: astore        5
     256: iload_3
     257: iload         4
     259: if_icmpge     294
     262: iload_3
     263: istore        6
     265: aload         5
     267: iload         6
     269: aload_2
     270: invokeinterface #145,  1          // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
     275: checkcast     #88                 // class java/lang/Iterable
     278: invokestatic  #142                // Method kotlin/collections/CollectionsKt.first:(Ljava/lang/Iterable;)Ljava/lang/Object;
     281: checkcast     #54                 // class java/lang/Number
     284: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     287: iastore
     288: iinc          3, 1
     291: goto          256
     294: aload         5
     296: invokestatic  #150                // Method kotlin/collections/ArraysKt.toList:([I)Ljava/util/List;
     299: invokestatic  #154                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     302: goto          674
     305: aload_1
     306: checkcast     #27                 // class java/util/Map
     309: astore_2
     310: iconst_0
     311: istore_3
     312: aload_2
     313: astore        4
     315: new           #90                 // class java/util/ArrayList
     318: dup
     319: invokespecial #91                 // Method java/util/ArrayList."<init>":()V
     322: checkcast     #93                 // class java/util/Collection
     325: astore        5
     327: iconst_0
     328: istore        6
     330: aload         4
     332: invokeinterface #123,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     337: invokeinterface #126,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     342: astore        7
     344: aload         7
     346: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     351: ifeq          668
     354: aload         7
     356: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     361: checkcast     #128                // class java/util/Map$Entry
     364: astore        8
     366: aload         8
     368: astore        9
     370: iconst_0
     371: istore        10
     373: aload         9
     375: invokeinterface #134,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     380: checkcast     #54                 // class java/lang/Number
     383: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     386: istore        11
     388: aload         9
     390: invokeinterface #131,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     395: checkcast     #54                 // class java/lang/Number
     398: invokevirtual #58                 // Method java/lang/Number.intValue:()I
     401: istore        12
     403: iload         12
     405: ifne          417
     408: invokestatic  #158                // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
     411: checkcast     #88                 // class java/lang/Iterable
     414: goto          655
     417: iload         11
     419: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     422: astore        13
     424: aload_1
     425: checkcast     #27                 // class java/util/Map
     428: aload         13
     430: iload         12
     432: iconst_1
     433: isub
     434: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     437: invokeinterface #62,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     442: pop
     443: nop
     444: aload_0
     445: aload_1
     446: invokespecial #66                 // Method permute:(Ljava/util/HashMap;)Ljava/util/List;
     449: checkcast     #88                 // class java/lang/Iterable
     452: astore        14
     454: iconst_0
     455: istore        13
     457: aload         14
     459: astore        15
     461: new           #90                 // class java/util/ArrayList
     464: dup
     465: aload         14
     467: bipush        10
     469: invokestatic  #162                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     472: invokespecial #165                // Method java/util/ArrayList."<init>":(I)V
     475: checkcast     #93                 // class java/util/Collection
     478: astore        16
     480: iconst_0
     481: istore        17
     483: aload         15
     485: invokeinterface #97,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     490: astore        18
     492: aload         18
     494: invokeinterface #103,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     499: ifeq          577
     502: aload         18
     504: invokeinterface #107,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     509: astore        19
     511: aload         16
     513: aload         19
     515: checkcast     #113                // class java/util/List
     518: astore        20
     520: astore        21
     522: iconst_0
     523: istore        22
     525: new           #90                 // class java/util/ArrayList
     528: dup
     529: invokespecial #91                 // Method java/util/ArrayList."<init>":()V
     532: checkcast     #113                // class java/util/List
     535: astore        23
     537: aload         23
     539: iload         11
     541: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     544: invokeinterface #166,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     549: pop
     550: aload         23
     552: aload         20
     554: checkcast     #93                 // class java/util/Collection
     557: invokeinterface #170,  2          // InterfaceMethod java/util/List.addAll:(Ljava/util/Collection;)Z
     562: pop
     563: aload         23
     565: aload         21
     567: swap
     568: invokeinterface #111,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     573: pop
     574: goto          492
     577: aload         16
     579: checkcast     #113                // class java/util/List
     582: nop
     583: astore        14
     585: iload         11
     587: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     590: astore        15
     592: iload         12
     594: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     597: astore        16
     599: aload_1
     600: checkcast     #27                 // class java/util/Map
     603: aload         15
     605: aload         16
     607: invokeinterface #62,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     612: pop
     613: goto          649
     616: astore        13
     618: iload         11
     620: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     623: astore        16
     625: iload         12
     627: invokestatic  #33                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     630: astore        17
     632: aload_1
     633: checkcast     #27                 // class java/util/Map
     636: aload         16
     638: aload         17
     640: invokeinterface #62,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     645: pop
     646: aload         13
     648: athrow
     649: aload         14
     651: checkcast     #88                 // class java/lang/Iterable
     654: nop
     655: astore        9
     657: aload         5
     659: aload         9
     661: invokestatic  #173                // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     664: pop
     665: goto          344
     668: aload         5
     670: checkcast     #113                // class java/util/List
     673: nop
     674: areturn
    Exception table:
       from    to  target type
         443   585   616   any
         616   618   616   any
}


package leetcode.problem0040

class CombinationSumSecond {
    fun combinationSum2(candidates: IntArray, target: Int): List<List<Int>> {
        if (candidates.all { it > target }) {
            return emptyList()
        }

        val countMap = hashMapOf<Int, Int>()
        candidates.forEach {
            countMap[it] = (countMap[it] ?: 0) + 1
        }

        return combinationSum(countMap, target).toList()
    }

    private fun combinationSum(hashMap: HashMap<Int, Int>, target: Int): Set<List<Int>> {
        val answer = mutableSetOf<List<Int>>()
        hashMap.forEach { (candidate, count) ->
            if (count == 0) return@forEach
            when {
                target == candidate -> answer.add(listOf(candidate))
                target > candidate -> {
                    hashMap[candidate] = count - 1
                    combinationSum(hashMap, target - candidate).forEach {
                        if (it.isNotEmpty()) {
                            answer.add(it.toMutableList().apply { add(candidate) }.sorted())
                        }
                    }
                    hashMap[candidate] = count
                }
                else -> Unit
            }
        }
        return answer
    }
}

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

  public final java.util.List<java.util.List<java.lang.Integer>> combinationSum2(int[], int);
    Code:
       0: aload_1
       1: ldc           #16                 // String candidates
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: astore_3
       8: iconst_0
       9: istore        4
      11: iconst_0
      12: istore        5
      14: aload_3
      15: arraylength
      16: istore        6
      18: iload         5
      20: iload         6
      22: if_icmpge     62
      25: aload_3
      26: iload         5
      28: iaload
      29: istore        7
      31: iload         7
      33: istore        8
      35: iconst_0
      36: istore        9
      38: iload         8
      40: iload_2
      41: if_icmple     48
      44: iconst_1
      45: goto          49
      48: iconst_0
      49: ifne          56
      52: iconst_0
      53: goto          63
      56: iinc          5, 1
      59: goto          18
      62: iconst_1
      63: ifeq          70
      66: invokestatic  #28                 // Method kotlin/collections/CollectionsKt.emptyList:()Ljava/util/List;
      69: areturn
      70: new           #30                 // class java/util/HashMap
      73: dup
      74: invokespecial #31                 // Method java/util/HashMap."<init>":()V
      77: astore_3
      78: aload_1
      79: astore        4
      81: iconst_0
      82: istore        5
      84: iconst_0
      85: istore        6
      87: aload         4
      89: arraylength
      90: istore        7
      92: iload         6
      94: iload         7
      96: if_icmpge     177
      99: aload         4
     101: iload         6
     103: iaload
     104: istore        8
     106: iload         8
     108: istore        9
     110: iconst_0
     111: istore        10
     113: aload_3
     114: checkcast     #33                 // class java/util/Map
     117: astore        11
     119: iload         9
     121: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     124: astore        12
     126: aload_3
     127: iload         9
     129: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     132: invokevirtual #43                 // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     135: checkcast     #35                 // class java/lang/Integer
     138: dup
     139: ifnull        148
     142: invokevirtual #47                 // Method java/lang/Integer.intValue:()I
     145: goto          150
     148: pop
     149: iconst_0
     150: iconst_1
     151: iadd
     152: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     155: astore        13
     157: aload         11
     159: aload         12
     161: aload         13
     163: invokeinterface #51,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     168: pop
     169: nop
     170: nop
     171: iinc          6, 1
     174: goto          92
     177: nop
     178: aload_0
     179: aload_3
     180: iload_2
     181: invokespecial #55                 // Method combinationSum:(Ljava/util/HashMap;I)Ljava/util/Set;
     184: checkcast     #57                 // class java/lang/Iterable
     187: invokestatic  #61                 // Method kotlin/collections/CollectionsKt.toList:(Ljava/lang/Iterable;)Ljava/util/List;
     190: areturn

  private final java.util.Set<java.util.List<java.lang.Integer>> combinationSum(java.util.HashMap<java.lang.Integer, java.lang.Integer>, int);
    Code:
       0: new           #78                 // class java/util/LinkedHashSet
       3: dup
       4: invokespecial #79                 // Method java/util/LinkedHashSet."<init>":()V
       7: checkcast     #81                 // class java/util/Set
      10: astore_3
      11: aload_1
      12: checkcast     #33                 // class java/util/Map
      15: astore        4
      17: iconst_0
      18: istore        5
      20: aload         4
      22: invokeinterface #85,  1           // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
      27: invokeinterface #89,  1           // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
      32: astore        6
      34: aload         6
      36: invokeinterface #95,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      41: ifeq          323
      44: aload         6
      46: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      51: checkcast     #101                // class java/util/Map$Entry
      54: astore        7
      56: aload         7
      58: astore        8
      60: iconst_0
      61: istore        9
      63: aload         8
      65: invokeinterface #104,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
      70: checkcast     #106                // class java/lang/Number
      73: invokevirtual #107                // Method java/lang/Number.intValue:()I
      76: istore        10
      78: aload         8
      80: invokeinterface #110,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
      85: checkcast     #106                // class java/lang/Number
      88: invokevirtual #107                // Method java/lang/Number.intValue:()I
      91: istore        11
      93: iload         11
      95: ifeq          319
      98: nop
      99: iload_2
     100: iload         10
     102: if_icmpne     123
     105: aload_3
     106: iload         10
     108: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     111: invokestatic  #114                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     114: invokeinterface #118,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     119: pop
     120: goto          318
     123: iload_2
     124: iload         10
     126: if_icmple     317
     129: iload         10
     131: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     134: astore        12
     136: aload_1
     137: checkcast     #33                 // class java/util/Map
     140: aload         12
     142: iload         11
     144: iconst_1
     145: isub
     146: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     149: invokeinterface #51,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     154: pop
     155: aload_0
     156: aload_1
     157: iload_2
     158: iload         10
     160: isub
     161: invokespecial #55                 // Method combinationSum:(Ljava/util/HashMap;I)Ljava/util/Set;
     164: checkcast     #57                 // class java/lang/Iterable
     167: astore        13
     169: iconst_0
     170: istore        12
     172: aload         13
     174: invokeinterface #119,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     179: astore        14
     181: aload         14
     183: invokeinterface #95,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     188: ifeq          285
     191: aload         14
     193: invokeinterface #99,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     198: astore        15
     200: aload         15
     202: checkcast     #121                // class java/util/List
     205: astore        16
     207: iconst_0
     208: istore        17
     210: aload         16
     212: checkcast     #123                // class java/util/Collection
     215: invokeinterface #126,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     220: ifne          227
     223: iconst_1
     224: goto          228
     227: iconst_0
     228: ifeq          280
     231: aload_3
     232: aload         16
     234: checkcast     #123                // class java/util/Collection
     237: invokestatic  #130                // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
     240: astore        18
     242: aload         18
     244: astore        19
     246: astore        20
     248: iconst_0
     249: istore        21
     251: aload         19
     253: iload         10
     255: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     258: invokeinterface #131,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     263: pop
     264: aload         20
     266: aload         18
     268: checkcast     #57                 // class java/lang/Iterable
     271: invokestatic  #134                // Method kotlin/collections/CollectionsKt.sorted:(Ljava/lang/Iterable;)Ljava/util/List;
     274: invokeinterface #118,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     279: pop
     280: nop
     281: nop
     282: goto          181
     285: nop
     286: iload         10
     288: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     291: astore        12
     293: iload         11
     295: invokestatic  #39                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     298: astore        14
     300: aload_1
     301: checkcast     #33                 // class java/util/Map
     304: aload         12
     306: aload         14
     308: invokeinterface #51,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     313: pop
     314: goto          318
     317: nop
     318: nop
     319: nop
     320: goto          34
     323: nop
     324: aload_3
     325: areturn
}


package leetcode.problem0085

import java.util.Stack
import kotlin.math.max

class MaximalRectangle {
    fun maximalRectangle(matrix: Array<CharArray>): Int {
        val heights = Array(matrix.size) { IntArray(matrix[0].size) { 0 } }

        matrix.forEachIndexed { row, chars ->
            chars.indices.forEach { column ->
                heights[row][column] = when (matrix[row][column]) {
                    '1' -> if (row == 0) 1 else heights[row - 1][column] + 1
                    '0' -> 0
                    else -> error("Invalid value")
                }
            }
        }

        var maxSize = 0

        heights.forEach {
            maxSize = max(maxSize, largestRectangleArea(it))
        }

        return maxSize
    }

    private fun largestRectangleArea(heights: IntArray): Int {
        val indexStack = Stack<Int>()
        var maxArea = 0

        heights.forEachIndexed { index, i ->
            while (indexStack.isNotEmpty() && i < heights[indexStack.peek()]) {
                val currentIndex = indexStack.pop()
                val nextIndex = if (indexStack.isEmpty()) 0 else indexStack.peek() + 1
                val area = heights[currentIndex] * (index - nextIndex)
                maxArea = max(maxArea, area)
            }

            indexStack.push(index)
        }

        while (indexStack.isNotEmpty()) {
            val currentIndex = indexStack.pop()
            val nextIndex = if (indexStack.isEmpty()) 0 else indexStack.peek() + 1
            val area = heights[currentIndex] * (heights.size - nextIndex)
            maxArea = max(maxArea, area)
        }

        return maxArea
    }
}

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

  public final int maximalRectangle(char[][]);
    Code:
       0: aload_1
       1: ldc           #15                 // String matrix
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_0
       7: istore_3
       8: aload_1
       9: checkcast     #23                 // class "[Ljava/lang/Object;"
      12: arraylength
      13: istore        4
      15: iload         4
      17: anewarray     #25                 // class "[I"
      20: astore        5
      22: iload_3
      23: iload         4
      25: if_icmpge     90
      28: iload_3
      29: istore        6
      31: aload         5
      33: iload         6
      35: iconst_0
      36: istore        7
      38: aload_1
      39: iconst_0
      40: aaload
      41: arraylength
      42: istore        8
      44: iload         8
      46: newarray       int
      48: astore        9
      50: istore        19
      52: astore        18
      54: iload         7
      56: iload         8
      58: if_icmpge     77
      61: iload         7
      63: istore        10
      65: aload         9
      67: iload         10
      69: iconst_0
      70: iastore
      71: iinc          7, 1
      74: goto          54
      77: aload         18
      79: iload         19
      81: aload         9
      83: aastore
      84: iinc          3, 1
      87: goto          22
      90: aload         5
      92: astore_2
      93: aload_1
      94: checkcast     #23                 // class "[Ljava/lang/Object;"
      97: astore_3
      98: iconst_0
      99: istore        4
     101: iconst_0
     102: istore        5
     104: iconst_0
     105: istore        6
     107: aload_3
     108: arraylength
     109: istore        7
     111: iload         6
     113: iload         7
     115: if_icmpge     279
     118: aload_3
     119: iload         6
     121: aaload
     122: astore        8
     124: iload         5
     126: iinc          5, 1
     129: aload         8
     131: checkcast     #27                 // class "[C"
     134: astore        9
     136: istore        10
     138: iconst_0
     139: istore        11
     141: aload         9
     143: invokestatic  #33                 // Method kotlin/collections/ArraysKt.getIndices:([C)Lkotlin/ranges/IntRange;
     146: checkcast     #35                 // class java/lang/Iterable
     149: astore        12
     151: iconst_0
     152: istore        13
     154: aload         12
     156: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     161: astore        14
     163: aload         14
     165: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     170: ifeq          270
     173: aload         14
     175: checkcast     #47                 // class kotlin/collections/IntIterator
     178: invokevirtual #51                 // Method kotlin/collections/IntIterator.nextInt:()I
     181: istore        15
     183: iload         15
     185: istore        16
     187: iconst_0
     188: istore        17
     190: aload_2
     191: iload         10
     193: aaload
     194: iload         16
     196: aload_1
     197: iload         10
     199: aaload
     200: iload         16
     202: caload
     203: tableswitch   { // 48 to 49
                    48: 247
                    49: 224
               default: 251
          }
     224: iload         10
     226: ifne          233
     229: iconst_1
     230: goto          264
     233: aload_2
     234: iload         10
     236: iconst_1
     237: isub
     238: aaload
     239: iload         16
     241: iaload
     242: iconst_1
     243: iadd
     244: goto          264
     247: iconst_0
     248: goto          264
     251: new           #53                 // class java/lang/IllegalStateException
     254: dup
     255: ldc           #55                 // String Invalid value
     257: invokevirtual #59                 // Method java/lang/Object.toString:()Ljava/lang/String;
     260: invokespecial #62                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
     263: athrow
     264: iastore
     265: nop
     266: nop
     267: goto          163
     270: nop
     271: nop
     272: nop
     273: iinc          6, 1
     276: goto          111
     279: nop
     280: iconst_0
     281: istore_3
     282: aload_2
     283: checkcast     #23                 // class "[Ljava/lang/Object;"
     286: astore        4
     288: iconst_0
     289: istore        5
     291: iconst_0
     292: istore        6
     294: aload         4
     296: arraylength
     297: istore        7
     299: iload         6
     301: iload         7
     303: if_icmpge     342
     306: aload         4
     308: iload         6
     310: aaload
     311: astore        8
     313: aload         8
     315: checkcast     #25                 // class "[I"
     318: astore        9
     320: iconst_0
     321: istore        10
     323: iload_3
     324: aload_0
     325: aload         9
     327: invokespecial #66                 // Method largestRectangleArea:([I)I
     330: invokestatic  #72                 // Method java/lang/Math.max:(II)I
     333: istore_3
     334: nop
     335: nop
     336: iinc          6, 1
     339: goto          299
     342: nop
     343: iload_3
     344: ireturn

  private final int largestRectangleArea(int[]);
    Code:
       0: new           #97                 // class java/util/Stack
       3: dup
       4: invokespecial #98                 // Method java/util/Stack."<init>":()V
       7: astore_2
       8: iconst_0
       9: istore_3
      10: aload_1
      11: astore        4
      13: iconst_0
      14: istore        5
      16: iconst_0
      17: istore        6
      19: iconst_0
      20: istore        7
      22: aload         4
      24: arraylength
      25: istore        8
      27: iload         7
      29: iload         8
      31: if_icmpge     180
      34: aload         4
      36: iload         7
      38: iaload
      39: istore        9
      41: iload         6
      43: iinc          6, 1
      46: iload         9
      48: istore        10
      50: istore        11
      52: iconst_0
      53: istore        12
      55: aload_2
      56: checkcast     #100                // class java/util/Collection
      59: invokeinterface #103,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      64: ifne          71
      67: iconst_1
      68: goto          72
      71: iconst_0
      72: ifeq          162
      75: iload         10
      77: aload_1
      78: aload_2
      79: invokevirtual #107                // Method java/util/Stack.peek:()Ljava/lang/Object;
      82: dup
      83: ldc           #109                // String peek(...)
      85: invokestatic  #112                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      88: checkcast     #114                // class java/lang/Number
      91: invokevirtual #117                // Method java/lang/Number.intValue:()I
      94: iaload
      95: if_icmpge     162
      98: aload_2
      99: invokevirtual #120                // Method java/util/Stack.pop:()Ljava/lang/Object;
     102: checkcast     #122                // class java/lang/Integer
     105: astore        13
     107: aload_2
     108: invokevirtual #123                // Method java/util/Stack.isEmpty:()Z
     111: ifeq          118
     114: iconst_0
     115: goto          130
     118: aload_2
     119: invokevirtual #107                // Method java/util/Stack.peek:()Ljava/lang/Object;
     122: checkcast     #114                // class java/lang/Number
     125: invokevirtual #117                // Method java/lang/Number.intValue:()I
     128: iconst_1
     129: iadd
     130: istore        14
     132: aload_1
     133: aload         13
     135: invokestatic  #127                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     138: aload         13
     140: invokevirtual #128                // Method java/lang/Integer.intValue:()I
     143: iaload
     144: iload         11
     146: iload         14
     148: isub
     149: imul
     150: istore        15
     152: iload_3
     153: iload         15
     155: invokestatic  #72                 // Method java/lang/Math.max:(II)I
     158: istore_3
     159: goto          55
     162: aload_2
     163: iload         11
     165: invokestatic  #132                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     168: invokevirtual #136                // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
     171: pop
     172: nop
     173: nop
     174: iinc          7, 1
     177: goto          27
     180: nop
     181: aload_2
     182: checkcast     #100                // class java/util/Collection
     185: invokeinterface #103,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     190: ifne          197
     193: iconst_1
     194: goto          198
     197: iconst_0
     198: ifeq          265
     201: aload_2
     202: invokevirtual #120                // Method java/util/Stack.pop:()Ljava/lang/Object;
     205: checkcast     #122                // class java/lang/Integer
     208: astore        4
     210: aload_2
     211: invokevirtual #123                // Method java/util/Stack.isEmpty:()Z
     214: ifeq          221
     217: iconst_0
     218: goto          233
     221: aload_2
     222: invokevirtual #107                // Method java/util/Stack.peek:()Ljava/lang/Object;
     225: checkcast     #114                // class java/lang/Number
     228: invokevirtual #117                // Method java/lang/Number.intValue:()I
     231: iconst_1
     232: iadd
     233: istore        5
     235: aload_1
     236: aload         4
     238: invokestatic  #127                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     241: aload         4
     243: invokevirtual #128                // Method java/lang/Integer.intValue:()I
     246: iaload
     247: aload_1
     248: arraylength
     249: iload         5
     251: isub
     252: imul
     253: istore        6
     255: iload_3
     256: iload         6
     258: invokestatic  #72                 // Method java/lang/Math.max:(II)I
     261: istore_3
     262: goto          181
     265: iload_3
     266: ireturn
}