All Downloads are FREE. Search and download functionalities are using the official Maven repository.

akka.stream.scaladsl.UnzipWithApply.scala Maven / Gradle / Ivy

// auto-generated by sbt-boilerplate
/*
 * Copyright (C) 2014-2020 Lightbend Inc. 
 */

package akka.stream.scaladsl

import akka.stream._
import akka.stream.stage._

object UnzipWithApply {

  abstract trait UnzipWithCreator[In, Out, T] {
    def create(unzipper: Function1[In, Out]): T
  }

  trait UnzipWithCreator2[In, A1, A2] extends UnzipWithCreator[In, Tuple2[A1, A2], UnzipWith2[In, A1, A2]] {
    override def create(unzipper: In => (A1, A2)): UnzipWith2[In, A1, A2] = {
      new UnzipWith2(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject2 extends UnzipWithCreator2[Any, Any, Any]

  trait UnzipWithCreator3[In, A1, A2, A3] extends UnzipWithCreator[In, Tuple3[A1, A2, A3], UnzipWith3[In, A1, A2, A3]] {
    override def create(unzipper: In => (A1, A2, A3)): UnzipWith3[In, A1, A2, A3] = {
      new UnzipWith3(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject3 extends UnzipWithCreator3[Any, Any, Any, Any]

  trait UnzipWithCreator4[In, A1, A2, A3, A4] extends UnzipWithCreator[In, Tuple4[A1, A2, A3, A4], UnzipWith4[In, A1, A2, A3, A4]] {
    override def create(unzipper: In => (A1, A2, A3, A4)): UnzipWith4[In, A1, A2, A3, A4] = {
      new UnzipWith4(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject4 extends UnzipWithCreator4[Any, Any, Any, Any, Any]

  trait UnzipWithCreator5[In, A1, A2, A3, A4, A5] extends UnzipWithCreator[In, Tuple5[A1, A2, A3, A4, A5], UnzipWith5[In, A1, A2, A3, A4, A5]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5)): UnzipWith5[In, A1, A2, A3, A4, A5] = {
      new UnzipWith5(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject5 extends UnzipWithCreator5[Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator6[In, A1, A2, A3, A4, A5, A6] extends UnzipWithCreator[In, Tuple6[A1, A2, A3, A4, A5, A6], UnzipWith6[In, A1, A2, A3, A4, A5, A6]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6)): UnzipWith6[In, A1, A2, A3, A4, A5, A6] = {
      new UnzipWith6(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject6 extends UnzipWithCreator6[Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator7[In, A1, A2, A3, A4, A5, A6, A7] extends UnzipWithCreator[In, Tuple7[A1, A2, A3, A4, A5, A6, A7], UnzipWith7[In, A1, A2, A3, A4, A5, A6, A7]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7)): UnzipWith7[In, A1, A2, A3, A4, A5, A6, A7] = {
      new UnzipWith7(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject7 extends UnzipWithCreator7[Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator8[In, A1, A2, A3, A4, A5, A6, A7, A8] extends UnzipWithCreator[In, Tuple8[A1, A2, A3, A4, A5, A6, A7, A8], UnzipWith8[In, A1, A2, A3, A4, A5, A6, A7, A8]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8)): UnzipWith8[In, A1, A2, A3, A4, A5, A6, A7, A8] = {
      new UnzipWith8(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject8 extends UnzipWithCreator8[Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9] extends UnzipWithCreator[In, Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9], UnzipWith9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9)): UnzipWith9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9] = {
      new UnzipWith9(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject9 extends UnzipWithCreator9[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10] extends UnzipWithCreator[In, Tuple10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10], UnzipWith10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)): UnzipWith10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10] = {
      new UnzipWith10(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject10 extends UnzipWithCreator10[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11] extends UnzipWithCreator[In, Tuple11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11], UnzipWith11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)): UnzipWith11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11] = {
      new UnzipWith11(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject11 extends UnzipWithCreator11[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12] extends UnzipWithCreator[In, Tuple12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12], UnzipWith12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)): UnzipWith12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12] = {
      new UnzipWith12(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject12 extends UnzipWithCreator12[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13] extends UnzipWithCreator[In, Tuple13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13], UnzipWith13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)): UnzipWith13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13] = {
      new UnzipWith13(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject13 extends UnzipWithCreator13[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14] extends UnzipWithCreator[In, Tuple14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14], UnzipWith14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)): UnzipWith14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14] = {
      new UnzipWith14(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject14 extends UnzipWithCreator14[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15] extends UnzipWithCreator[In, Tuple15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15], UnzipWith15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)): UnzipWith15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15] = {
      new UnzipWith15(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject15 extends UnzipWithCreator15[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16] extends UnzipWithCreator[In, Tuple16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16], UnzipWith16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16)): UnzipWith16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16] = {
      new UnzipWith16(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject16 extends UnzipWithCreator16[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17] extends UnzipWithCreator[In, Tuple17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17], UnzipWith17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17)): UnzipWith17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17] = {
      new UnzipWith17(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject17 extends UnzipWithCreator17[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18] extends UnzipWithCreator[In, Tuple18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18], UnzipWith18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18)): UnzipWith18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18] = {
      new UnzipWith18(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject18 extends UnzipWithCreator18[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19] extends UnzipWithCreator[In, Tuple19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19], UnzipWith19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19)): UnzipWith19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19] = {
      new UnzipWith19(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject19 extends UnzipWithCreator19[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20] extends UnzipWithCreator[In, Tuple20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20], UnzipWith20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)): UnzipWith20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20] = {
      new UnzipWith20(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject20 extends UnzipWithCreator20[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21] extends UnzipWithCreator[In, Tuple21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21], UnzipWith21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21)): UnzipWith21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21] = {
      new UnzipWith21(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject21 extends UnzipWithCreator21[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]

  trait UnzipWithCreator22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22] extends UnzipWithCreator[In, Tuple22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22], UnzipWith22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22]] {
    override def create(unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22)): UnzipWith22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22] = {
      new UnzipWith22(unzipper)
    }
  }

  implicit object UnzipWithCreatorObject22 extends UnzipWithCreator22[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]
}

trait UnzipWithApply {
  import UnzipWithApply._


  /**
   * Create a new `UnzipWith` specialized for 2 outputs.
   *
   * @param unzipper unzipping-function from the input value to 2 output values
   */
   def apply[In, A1, A2](unzipper: In => Tuple2[A1, A2])(implicit creator: UnzipWithCreator2[Any, Any, Any]): UnzipWith2[In, A1, A2] = {
     creator.asInstanceOf[UnzipWithCreator2[In, A1, A2]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 3 outputs.
   *
   * @param unzipper unzipping-function from the input value to 3 output values
   */
   def apply[In, A1, A2, A3](unzipper: In => Tuple3[A1, A2, A3])(implicit creator: UnzipWithCreator3[Any, Any, Any, Any]): UnzipWith3[In, A1, A2, A3] = {
     creator.asInstanceOf[UnzipWithCreator3[In, A1, A2, A3]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 4 outputs.
   *
   * @param unzipper unzipping-function from the input value to 4 output values
   */
   def apply[In, A1, A2, A3, A4](unzipper: In => Tuple4[A1, A2, A3, A4])(implicit creator: UnzipWithCreator4[Any, Any, Any, Any, Any]): UnzipWith4[In, A1, A2, A3, A4] = {
     creator.asInstanceOf[UnzipWithCreator4[In, A1, A2, A3, A4]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 5 outputs.
   *
   * @param unzipper unzipping-function from the input value to 5 output values
   */
   def apply[In, A1, A2, A3, A4, A5](unzipper: In => Tuple5[A1, A2, A3, A4, A5])(implicit creator: UnzipWithCreator5[Any, Any, Any, Any, Any, Any]): UnzipWith5[In, A1, A2, A3, A4, A5] = {
     creator.asInstanceOf[UnzipWithCreator5[In, A1, A2, A3, A4, A5]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 6 outputs.
   *
   * @param unzipper unzipping-function from the input value to 6 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6](unzipper: In => Tuple6[A1, A2, A3, A4, A5, A6])(implicit creator: UnzipWithCreator6[Any, Any, Any, Any, Any, Any, Any]): UnzipWith6[In, A1, A2, A3, A4, A5, A6] = {
     creator.asInstanceOf[UnzipWithCreator6[In, A1, A2, A3, A4, A5, A6]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 7 outputs.
   *
   * @param unzipper unzipping-function from the input value to 7 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7](unzipper: In => Tuple7[A1, A2, A3, A4, A5, A6, A7])(implicit creator: UnzipWithCreator7[Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith7[In, A1, A2, A3, A4, A5, A6, A7] = {
     creator.asInstanceOf[UnzipWithCreator7[In, A1, A2, A3, A4, A5, A6, A7]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 8 outputs.
   *
   * @param unzipper unzipping-function from the input value to 8 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8](unzipper: In => Tuple8[A1, A2, A3, A4, A5, A6, A7, A8])(implicit creator: UnzipWithCreator8[Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith8[In, A1, A2, A3, A4, A5, A6, A7, A8] = {
     creator.asInstanceOf[UnzipWithCreator8[In, A1, A2, A3, A4, A5, A6, A7, A8]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 9 outputs.
   *
   * @param unzipper unzipping-function from the input value to 9 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9](unzipper: In => Tuple9[A1, A2, A3, A4, A5, A6, A7, A8, A9])(implicit creator: UnzipWithCreator9[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9] = {
     creator.asInstanceOf[UnzipWithCreator9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 10 outputs.
   *
   * @param unzipper unzipping-function from the input value to 10 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](unzipper: In => Tuple10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10])(implicit creator: UnzipWithCreator10[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10] = {
     creator.asInstanceOf[UnzipWithCreator10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 11 outputs.
   *
   * @param unzipper unzipping-function from the input value to 11 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](unzipper: In => Tuple11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11])(implicit creator: UnzipWithCreator11[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11] = {
     creator.asInstanceOf[UnzipWithCreator11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 12 outputs.
   *
   * @param unzipper unzipping-function from the input value to 12 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](unzipper: In => Tuple12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12])(implicit creator: UnzipWithCreator12[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12] = {
     creator.asInstanceOf[UnzipWithCreator12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 13 outputs.
   *
   * @param unzipper unzipping-function from the input value to 13 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](unzipper: In => Tuple13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13])(implicit creator: UnzipWithCreator13[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13] = {
     creator.asInstanceOf[UnzipWithCreator13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 14 outputs.
   *
   * @param unzipper unzipping-function from the input value to 14 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](unzipper: In => Tuple14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14])(implicit creator: UnzipWithCreator14[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14] = {
     creator.asInstanceOf[UnzipWithCreator14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 15 outputs.
   *
   * @param unzipper unzipping-function from the input value to 15 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](unzipper: In => Tuple15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15])(implicit creator: UnzipWithCreator15[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15] = {
     creator.asInstanceOf[UnzipWithCreator15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 16 outputs.
   *
   * @param unzipper unzipping-function from the input value to 16 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](unzipper: In => Tuple16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16])(implicit creator: UnzipWithCreator16[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16] = {
     creator.asInstanceOf[UnzipWithCreator16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 17 outputs.
   *
   * @param unzipper unzipping-function from the input value to 17 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](unzipper: In => Tuple17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17])(implicit creator: UnzipWithCreator17[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17] = {
     creator.asInstanceOf[UnzipWithCreator17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 18 outputs.
   *
   * @param unzipper unzipping-function from the input value to 18 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](unzipper: In => Tuple18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18])(implicit creator: UnzipWithCreator18[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18] = {
     creator.asInstanceOf[UnzipWithCreator18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 19 outputs.
   *
   * @param unzipper unzipping-function from the input value to 19 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](unzipper: In => Tuple19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19])(implicit creator: UnzipWithCreator19[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19] = {
     creator.asInstanceOf[UnzipWithCreator19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 20 outputs.
   *
   * @param unzipper unzipping-function from the input value to 20 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](unzipper: In => Tuple20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20])(implicit creator: UnzipWithCreator20[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20] = {
     creator.asInstanceOf[UnzipWithCreator20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 21 outputs.
   *
   * @param unzipper unzipping-function from the input value to 21 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](unzipper: In => Tuple21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21])(implicit creator: UnzipWithCreator21[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21] = {
     creator.asInstanceOf[UnzipWithCreator21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21]].create(unzipper)
   }

  /**
   * Create a new `UnzipWith` specialized for 22 outputs.
   *
   * @param unzipper unzipping-function from the input value to 22 output values
   */
   def apply[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](unzipper: In => Tuple22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22])(implicit creator: UnzipWithCreator22[Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any, Any]): UnzipWith22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22] = {
     creator.asInstanceOf[UnzipWithCreator22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22]].create(unzipper)
   }
}

/** `UnzipWith` specialized for 2 outputs */
class UnzipWith2[In, A1, A2](val unzipper: In => (A1, A2)) extends GraphStage[FanOutShape2[In, A1, A2]] {
  override def initialAttributes = Attributes.name("UnzipWith2")
  override val shape: FanOutShape2[In, A1, A2] = new FanOutShape2[In, A1, A2]("UnzipWith2")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 2
    var downstreamRunning = 2

    var pending0 = true
    var pending1 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith2"
}

/** `UnzipWith` specialized for 3 outputs */
class UnzipWith3[In, A1, A2, A3](val unzipper: In => (A1, A2, A3)) extends GraphStage[FanOutShape3[In, A1, A2, A3]] {
  override def initialAttributes = Attributes.name("UnzipWith3")
  override val shape: FanOutShape3[In, A1, A2, A3] = new FanOutShape3[In, A1, A2, A3]("UnzipWith3")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 3
    var downstreamRunning = 3

    var pending0 = true
    var pending1 = true
    var pending2 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith3"
}

/** `UnzipWith` specialized for 4 outputs */
class UnzipWith4[In, A1, A2, A3, A4](val unzipper: In => (A1, A2, A3, A4)) extends GraphStage[FanOutShape4[In, A1, A2, A3, A4]] {
  override def initialAttributes = Attributes.name("UnzipWith4")
  override val shape: FanOutShape4[In, A1, A2, A3, A4] = new FanOutShape4[In, A1, A2, A3, A4]("UnzipWith4")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 4
    var downstreamRunning = 4

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith4"
}

/** `UnzipWith` specialized for 5 outputs */
class UnzipWith5[In, A1, A2, A3, A4, A5](val unzipper: In => (A1, A2, A3, A4, A5)) extends GraphStage[FanOutShape5[In, A1, A2, A3, A4, A5]] {
  override def initialAttributes = Attributes.name("UnzipWith5")
  override val shape: FanOutShape5[In, A1, A2, A3, A4, A5] = new FanOutShape5[In, A1, A2, A3, A4, A5]("UnzipWith5")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 5
    var downstreamRunning = 5

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith5"
}

/** `UnzipWith` specialized for 6 outputs */
class UnzipWith6[In, A1, A2, A3, A4, A5, A6](val unzipper: In => (A1, A2, A3, A4, A5, A6)) extends GraphStage[FanOutShape6[In, A1, A2, A3, A4, A5, A6]] {
  override def initialAttributes = Attributes.name("UnzipWith6")
  override val shape: FanOutShape6[In, A1, A2, A3, A4, A5, A6] = new FanOutShape6[In, A1, A2, A3, A4, A5, A6]("UnzipWith6")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 6
    var downstreamRunning = 6

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith6"
}

/** `UnzipWith` specialized for 7 outputs */
class UnzipWith7[In, A1, A2, A3, A4, A5, A6, A7](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7)) extends GraphStage[FanOutShape7[In, A1, A2, A3, A4, A5, A6, A7]] {
  override def initialAttributes = Attributes.name("UnzipWith7")
  override val shape: FanOutShape7[In, A1, A2, A3, A4, A5, A6, A7] = new FanOutShape7[In, A1, A2, A3, A4, A5, A6, A7]("UnzipWith7")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 7
    var downstreamRunning = 7

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith7"
}

/** `UnzipWith` specialized for 8 outputs */
class UnzipWith8[In, A1, A2, A3, A4, A5, A6, A7, A8](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8)) extends GraphStage[FanOutShape8[In, A1, A2, A3, A4, A5, A6, A7, A8]] {
  override def initialAttributes = Attributes.name("UnzipWith8")
  override val shape: FanOutShape8[In, A1, A2, A3, A4, A5, A6, A7, A8] = new FanOutShape8[In, A1, A2, A3, A4, A5, A6, A7, A8]("UnzipWith8")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 8
    var downstreamRunning = 8

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith8"
}

/** `UnzipWith` specialized for 9 outputs */
class UnzipWith9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9)) extends GraphStage[FanOutShape9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9]] {
  override def initialAttributes = Attributes.name("UnzipWith9")
  override val shape: FanOutShape9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9] = new FanOutShape9[In, A1, A2, A3, A4, A5, A6, A7, A8, A9]("UnzipWith9")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 9
    var downstreamRunning = 9

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith9"
}

/** `UnzipWith` specialized for 10 outputs */
class UnzipWith10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) extends GraphStage[FanOutShape10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]] {
  override def initialAttributes = Attributes.name("UnzipWith10")
  override val shape: FanOutShape10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10] = new FanOutShape10[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10]("UnzipWith10")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 10
    var downstreamRunning = 10

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith10"
}

/** `UnzipWith` specialized for 11 outputs */
class UnzipWith11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) extends GraphStage[FanOutShape11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11]] {
  override def initialAttributes = Attributes.name("UnzipWith11")
  override val shape: FanOutShape11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11] = new FanOutShape11[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11]("UnzipWith11")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 11
    var downstreamRunning = 11

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith11"
}

/** `UnzipWith` specialized for 12 outputs */
class UnzipWith12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) extends GraphStage[FanOutShape12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12]] {
  override def initialAttributes = Attributes.name("UnzipWith12")
  override val shape: FanOutShape12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12] = new FanOutShape12[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12]("UnzipWith12")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 12
    var downstreamRunning = 12

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith12"
}

/** `UnzipWith` specialized for 13 outputs */
class UnzipWith13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) extends GraphStage[FanOutShape13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13]] {
  override def initialAttributes = Attributes.name("UnzipWith13")
  override val shape: FanOutShape13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13] = new FanOutShape13[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13]("UnzipWith13")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 13
    var downstreamRunning = 13

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith13"
}

/** `UnzipWith` specialized for 14 outputs */
class UnzipWith14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) extends GraphStage[FanOutShape14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14]] {
  override def initialAttributes = Attributes.name("UnzipWith14")
  override val shape: FanOutShape14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14] = new FanOutShape14[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14]("UnzipWith14")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 14
    var downstreamRunning = 14

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith14"
}

/** `UnzipWith` specialized for 15 outputs */
class UnzipWith15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15)) extends GraphStage[FanOutShape15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15]] {
  override def initialAttributes = Attributes.name("UnzipWith15")
  override val shape: FanOutShape15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15] = new FanOutShape15[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15]("UnzipWith15")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 15
    var downstreamRunning = 15

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith15"
}

/** `UnzipWith` specialized for 16 outputs */
class UnzipWith16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16)) extends GraphStage[FanOutShape16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]] {
  override def initialAttributes = Attributes.name("UnzipWith16")
  override val shape: FanOutShape16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16] = new FanOutShape16[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16]("UnzipWith16")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 16
    var downstreamRunning = 16

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith16"
}

/** `UnzipWith` specialized for 17 outputs */
class UnzipWith17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17)) extends GraphStage[FanOutShape17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17]] {
  override def initialAttributes = Attributes.name("UnzipWith17")
  override val shape: FanOutShape17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17] = new FanOutShape17[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17]("UnzipWith17")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 17
    var downstreamRunning = 17

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith17"
}

/** `UnzipWith` specialized for 18 outputs */
class UnzipWith18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18)) extends GraphStage[FanOutShape18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18]] {
  override def initialAttributes = Attributes.name("UnzipWith18")
  override val shape: FanOutShape18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18] = new FanOutShape18[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18]("UnzipWith18")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16
  def out17: Outlet[A18] = shape.out17

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 18
    var downstreamRunning = 18

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true
    var pending17 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        if (!isClosed(out17)) {
          push(out17, elem._18)
          pending17 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out17, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending17 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending17) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith18"
}

/** `UnzipWith` specialized for 19 outputs */
class UnzipWith19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19)) extends GraphStage[FanOutShape19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19]] {
  override def initialAttributes = Attributes.name("UnzipWith19")
  override val shape: FanOutShape19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19] = new FanOutShape19[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19]("UnzipWith19")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16
  def out17: Outlet[A18] = shape.out17
  def out18: Outlet[A19] = shape.out18

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 19
    var downstreamRunning = 19

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true
    var pending17 = true
    var pending18 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        if (!isClosed(out17)) {
          push(out17, elem._18)
          pending17 = true
        }
        if (!isClosed(out18)) {
          push(out18, elem._19)
          pending18 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out17, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending17 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending17) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out18, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending18 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending18) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith19"
}

/** `UnzipWith` specialized for 20 outputs */
class UnzipWith20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20)) extends GraphStage[FanOutShape20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20]] {
  override def initialAttributes = Attributes.name("UnzipWith20")
  override val shape: FanOutShape20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20] = new FanOutShape20[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20]("UnzipWith20")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16
  def out17: Outlet[A18] = shape.out17
  def out18: Outlet[A19] = shape.out18
  def out19: Outlet[A20] = shape.out19

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 20
    var downstreamRunning = 20

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true
    var pending17 = true
    var pending18 = true
    var pending19 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        if (!isClosed(out17)) {
          push(out17, elem._18)
          pending17 = true
        }
        if (!isClosed(out18)) {
          push(out18, elem._19)
          pending18 = true
        }
        if (!isClosed(out19)) {
          push(out19, elem._20)
          pending19 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out17, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending17 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending17) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out18, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending18 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending18) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out19, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending19 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending19) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith20"
}

/** `UnzipWith` specialized for 21 outputs */
class UnzipWith21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21)) extends GraphStage[FanOutShape21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21]] {
  override def initialAttributes = Attributes.name("UnzipWith21")
  override val shape: FanOutShape21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21] = new FanOutShape21[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21]("UnzipWith21")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16
  def out17: Outlet[A18] = shape.out17
  def out18: Outlet[A19] = shape.out18
  def out19: Outlet[A20] = shape.out19
  def out20: Outlet[A21] = shape.out20

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 21
    var downstreamRunning = 21

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true
    var pending17 = true
    var pending18 = true
    var pending19 = true
    var pending20 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        if (!isClosed(out17)) {
          push(out17, elem._18)
          pending17 = true
        }
        if (!isClosed(out18)) {
          push(out18, elem._19)
          pending18 = true
        }
        if (!isClosed(out19)) {
          push(out19, elem._20)
          pending19 = true
        }
        if (!isClosed(out20)) {
          push(out20, elem._21)
          pending20 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out17, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending17 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending17) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out18, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending18 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending18) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out19, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending19 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending19) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out20, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending20 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending20) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith21"
}

/** `UnzipWith` specialized for 22 outputs */
class UnzipWith22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22](val unzipper: In => (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22)) extends GraphStage[FanOutShape22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22]] {
  override def initialAttributes = Attributes.name("UnzipWith22")
  override val shape: FanOutShape22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22] = new FanOutShape22[In, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22]("UnzipWith22")
  def in: Inlet[In] = shape.in

  def out0: Outlet[A1] = shape.out0
  def out1: Outlet[A2] = shape.out1
  def out2: Outlet[A3] = shape.out2
  def out3: Outlet[A4] = shape.out3
  def out4: Outlet[A5] = shape.out4
  def out5: Outlet[A6] = shape.out5
  def out6: Outlet[A7] = shape.out6
  def out7: Outlet[A8] = shape.out7
  def out8: Outlet[A9] = shape.out8
  def out9: Outlet[A10] = shape.out9
  def out10: Outlet[A11] = shape.out10
  def out11: Outlet[A12] = shape.out11
  def out12: Outlet[A13] = shape.out12
  def out13: Outlet[A14] = shape.out13
  def out14: Outlet[A15] = shape.out14
  def out15: Outlet[A16] = shape.out15
  def out16: Outlet[A17] = shape.out16
  def out17: Outlet[A18] = shape.out17
  def out18: Outlet[A19] = shape.out18
  def out19: Outlet[A20] = shape.out19
  def out20: Outlet[A21] = shape.out20
  def out21: Outlet[A22] = shape.out21

  override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) {
    var pendingCount = 22
    var downstreamRunning = 22

    var pending0 = true
    var pending1 = true
    var pending2 = true
    var pending3 = true
    var pending4 = true
    var pending5 = true
    var pending6 = true
    var pending7 = true
    var pending8 = true
    var pending9 = true
    var pending10 = true
    var pending11 = true
    var pending12 = true
    var pending13 = true
    var pending14 = true
    var pending15 = true
    var pending16 = true
    var pending17 = true
    var pending18 = true
    var pending19 = true
    var pending20 = true
    var pending21 = true

    setHandler(in, new InHandler {
      override def onPush() = {
        val elem = unzipper(grab(in))
        if (!isClosed(out0)) {
          push(out0, elem._1)
          pending0 = true
        }
        if (!isClosed(out1)) {
          push(out1, elem._2)
          pending1 = true
        }
        if (!isClosed(out2)) {
          push(out2, elem._3)
          pending2 = true
        }
        if (!isClosed(out3)) {
          push(out3, elem._4)
          pending3 = true
        }
        if (!isClosed(out4)) {
          push(out4, elem._5)
          pending4 = true
        }
        if (!isClosed(out5)) {
          push(out5, elem._6)
          pending5 = true
        }
        if (!isClosed(out6)) {
          push(out6, elem._7)
          pending6 = true
        }
        if (!isClosed(out7)) {
          push(out7, elem._8)
          pending7 = true
        }
        if (!isClosed(out8)) {
          push(out8, elem._9)
          pending8 = true
        }
        if (!isClosed(out9)) {
          push(out9, elem._10)
          pending9 = true
        }
        if (!isClosed(out10)) {
          push(out10, elem._11)
          pending10 = true
        }
        if (!isClosed(out11)) {
          push(out11, elem._12)
          pending11 = true
        }
        if (!isClosed(out12)) {
          push(out12, elem._13)
          pending12 = true
        }
        if (!isClosed(out13)) {
          push(out13, elem._14)
          pending13 = true
        }
        if (!isClosed(out14)) {
          push(out14, elem._15)
          pending14 = true
        }
        if (!isClosed(out15)) {
          push(out15, elem._16)
          pending15 = true
        }
        if (!isClosed(out16)) {
          push(out16, elem._17)
          pending16 = true
        }
        if (!isClosed(out17)) {
          push(out17, elem._18)
          pending17 = true
        }
        if (!isClosed(out18)) {
          push(out18, elem._19)
          pending18 = true
        }
        if (!isClosed(out19)) {
          push(out19, elem._20)
          pending19 = true
        }
        if (!isClosed(out20)) {
          push(out20, elem._21)
          pending20 = true
        }
        if (!isClosed(out21)) {
          push(out21, elem._22)
          pending21 = true
        }
        pendingCount = downstreamRunning
      }
    })

    setHandler(out0, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending0 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending0) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out1, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending1 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending1) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out2, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending2 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending2) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out3, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending3 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending3) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out4, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending4 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending4) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out5, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending5 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending5) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out6, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending6 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending6) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out7, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending7 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending7) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out8, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending8 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending8) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out9, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending9 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending9) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out10, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending10 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending10) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out11, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending11 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending11) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out12, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending12 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending12) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out13, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending13 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending13) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out14, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending14 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending14) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out15, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending15 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending15) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out16, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending16 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending16) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out17, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending17 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending17) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out18, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending18 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending18) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out19, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending19 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending19) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out20, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending20 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending20) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })
    setHandler(out21, new OutHandler {
      override def onPull() = {
        pendingCount -= 1
        pending21 = false
        if (pendingCount == 0) pull(in)
      }

      override def onDownstreamFinish(cause: Throwable): Unit = {
        downstreamRunning -= 1
        if (downstreamRunning == 0) cancelStage(cause)
        else {
          if (pending21) pendingCount -= 1
          if (pendingCount == 0 && !hasBeenPulled(in)) pull(in)
        }
      }
    })

  }

  override def toString = "UnzipWith22"
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy