code: def residual_dilated_conv(x, repeat, padding, name, hparams):
    
    with tf.variable_scope(name):
      k = (hparams.kernel_height, hparams.kernel_width)
      dilations_and_kernels = [((2**i, 1), k)
                               for i in range(hparams.num_hidden_layers)]
      for i in range(repeat):
        with tf.variable_scope("repeat_%d" % i):
          y = common_layers.conv_block(
              common_layers.layer_norm(x, hparams.hidden_size, name="lnorm"),
              hparams.hidden_size,
              dilations_and_kernels,
              padding=padding,
              name="residual_conv")
          y = tf.nn.dropout(y, 1.0 - hparams.dropout)
          x += y
      return x
docs: A stack of convolution blocks with residual connections.