// Path: influent-transport/src/main/java/influent/exception/InfluentIOException.java
// public final class InfluentIOException extends RuntimeException {
//   /**
//    * Constructs a new {@code InfluentIOException}.
//    *
//    * @param message the error message
//    * @param cause the cause
//    */
//   public InfluentIOException(final String message, final Throwable cause) {
//     super(message, cause);
//   }
// 
//   /**
//    * Constructs a new {@code InfluentIOException}.
//    *
//    * @param message the error message
//    */
//   public InfluentIOException(final String message) {
//     super(message);
//   }
// 
//   /** Constructs a new {@code InfluentIOException}. */
//   public InfluentIOException() {
//     super();
//   }
// }
// 
// Path: influent-transport/src/main/java/influent/internal/util/Exceptions.java
// public final class Exceptions {
//   /**
//    * A callable block.
//    *
//    * <p>This is the same as {@code Runnable} except that {@code Block#run} may throw some {@code
//    * Exception}.
//    */
//   @FunctionalInterface
//   public interface Block {
//     void run() throws Exception;
//   }
// 
//   /** Boolean specialized callable. */
//   @FunctionalInterface
//   public interface BooleanCallable {
//     boolean call() throws Exception;
//   }
// 
//   private static final Logger logger = LoggerFactory.getLogger(Exceptions.class);
// 
//   private Exceptions() {
//     throw new AssertionError();
//   }
// 
//   /**
//    * Executes the given processing and discards the error when some error occurs.
//    *
//    * @param f the processing
//    * @param messageOnError the error message to be logged on an error
//    */
//   public static void ignore(final Block f, final String messageOnError) {
//     try {
//       f.run();
//     } catch (final Exception e) {
//       logger.error(messageOnError, e);
//     }
//   }
// 
//   /**
//    * Executes the given processing and return null if the processing throws an exception.
//    *
//    * @param f the processing
//    * @param <T> the type of the {@code Callable}
//    * @return the return value of {@code f} or null when {@code f} fails
//    */
//   public static <T> T orNull(final Callable<T> f) {
//     try {
//       return f.call();
//     } catch (final Exception e) {
//       return null;
//     }
//   }
// 
//   /**
//    * Executes the given processing and return false if the processing throws an exception.
//    *
//    * @param f the processing
//    * @return true if {@code f} returns true
//    */
//   public static boolean orFalse(final BooleanCallable f) {
//     try {
//       return f.call();
//     } catch (final Exception e) {
//       return false;
//     }
//   }
// }


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import influent.exception.InfluentIOException;
import influent.internal.util.Exceptions;
import java.io.IOException;
import java.net.SocketAddress;
import java.net.SocketOption;
import java.net.StandardSocketOptions;
import java.nio.ByteBuffer;
import java.nio.channels.AlreadyBoundException;
import java.nio.channels.AsynchronousCloseException;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.UnsupportedAddressTypeException;
import java.util.Optional;
import java.util.Set;
   */
  public void register(final Set<Op> ops, final NioAttachment attachment) {
    eventLoop.register(channel, key, Op.bits(ops), attachment);
  }

  /**
   * Enables the given operation.
   *
   * <p>Operations are done asynchronously.
   *
   * @param op the operation to be enabled
   */
  public void enable(final Op op) {
    eventLoop.enableInterestSet(key, op.getBit());
  }

  /**
   * Disables the given operation.
   *
   * <p>Operations are done asynchronously.
   *
   * @param op the operation to be enabled
   */
  public void disable(final Op op) {
    eventLoop.disableInterestSet(key, op.getBit());
  }

  /** Closes the {@code DatagramChannel}. */
  @Override
  public void close() {
// Path: influent-transport/src/main/java/influent/exception/InfluentIOException.java
// public final class InfluentIOException extends RuntimeException {
//   /**
//    * Constructs a new {@code InfluentIOException}.
//    *
//    * @param message the error message
//    * @param cause the cause
//    */
//   public InfluentIOException(final String message, final Throwable cause) {
//     super(message, cause);
//   }
// 
//   /**
//    * Constructs a new {@code InfluentIOException}.
//    *
//    * @param message the error message
//    */
//   public InfluentIOException(final String message) {
//     super(message);
//   }
// 
//   /** Constructs a new {@code InfluentIOException}. */
//   public InfluentIOException() {
//     super();
//   }
// }
// 
// Path: influent-transport/src/main/java/influent/internal/util/Exceptions.java
// public final class Exceptions {
//   /**
//    * A callable block.
//    *
//    * <p>This is the same as {@code Runnable} except that {@code Block#run} may throw some {@code
//    * Exception}.
//    */
//   @FunctionalInterface
//   public interface Block {
//     void run() throws Exception;
//   }
// 
//   /** Boolean specialized callable. */
//   @FunctionalInterface
//   public interface BooleanCallable {
//     boolean call() throws Exception;
//   }
// 
//   private static final Logger logger = LoggerFactory.getLogger(Exceptions.class);
// 
//   private Exceptions() {
//     throw new AssertionError();
//   }
// 
//   /**
//    * Executes the given processing and discards the error when some error occurs.
//    *
//    * @param f the processing
//    * @param messageOnError the error message to be logged on an error
//    */
//   public static void ignore(final Block f, final String messageOnError) {
//     try {
//       f.run();
//     } catch (final Exception e) {
//       logger.error(messageOnError, e);
//     }
//   }
// 
//   /**
//    * Executes the given processing and return null if the processing throws an exception.
//    *
//    * @param f the processing
//    * @param <T> the type of the {@code Callable}
//    * @return the return value of {@code f} or null when {@code f} fails
//    */
//   public static <T> T orNull(final Callable<T> f) {
//     try {
//       return f.call();
//     } catch (final Exception e) {
//       return null;
//     }
//   }
// 
//   /**
//    * Executes the given processing and return false if the processing throws an exception.
//    *
//    * @param f the processing
//    * @return true if {@code f} returns true
//    */
//   public static boolean orFalse(final BooleanCallable f) {
//     try {
//       return f.call();
//     } catch (final Exception e) {
//       return false;
//     }
//   }
// }


// Path: influent-transport/src/main/java/influent/internal/nio/NioUdpChannel.java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import influent.exception.InfluentIOException;
import influent.internal.util.Exceptions;
import java.io.IOException;
import java.net.SocketAddress;
import java.net.SocketOption;
import java.net.StandardSocketOptions;
import java.nio.ByteBuffer;
import java.nio.channels.AlreadyBoundException;
import java.nio.channels.AsynchronousCloseException;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.UnsupportedAddressTypeException;
import java.util.Optional;
import java.util.Set;

   */
  public void register(final Set<Op> ops, final NioAttachment attachment) {
    eventLoop.register(channel, key, Op.bits(ops), attachment);
  }

  /**
   * Enables the given operation.
   *
   * <p>Operations are done asynchronously.
   *
   * @param op the operation to be enabled
   */
  public void enable(final Op op) {
    eventLoop.enableInterestSet(key, op.getBit());
  }

  /**
   * Disables the given operation.
   *
   * <p>Operations are done asynchronously.
   *
   * @param op the operation to be enabled
   */
  public void disable(final Op op) {
    eventLoop.disableInterestSet(key, op.getBit());
  }

  /** Closes the {@code DatagramChannel}. */
  @Override
  public void close() {
    Exceptions.ignore(