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

com.nextbreakpoint.freeimage4java.Libfreeimage Maven / Gradle / Ivy

// Generated by jextract

package com.nextbreakpoint.freeimage4java;

import java.lang.invoke.*;
import java.lang.foreign.*;
import java.nio.ByteOrder;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;

import static java.lang.foreign.ValueLayout.*;
import static java.lang.foreign.MemoryLayout.PathElement.*;

public class Libfreeimage {

    Libfreeimage() {
        // Should not be called directly
    }

    static final Arena LIBRARY_ARENA = Arena.ofAuto();
    static final boolean TRACE_DOWNCALLS = Boolean.getBoolean("jextract.trace.downcalls");

    static void traceDowncall(String name, Object... args) {
         String traceArgs = Arrays.stream(args)
                       .map(Object::toString)
                       .collect(Collectors.joining(", "));
         System.out.printf("%s(%s)\n", name, traceArgs);
    }

    static MemorySegment findOrThrow(String symbol) {
        return SYMBOL_LOOKUP.find(symbol)
            .orElseThrow(() -> new UnsatisfiedLinkError("unresolved symbol: " + symbol));
    }

    static MethodHandle upcallHandle(Class fi, String name, FunctionDescriptor fdesc) {
        try {
            return MethodHandles.lookup().findVirtual(fi, name, fdesc.toMethodType());
        } catch (ReflectiveOperationException ex) {
            throw new AssertionError(ex);
        }
    }

    static MemoryLayout align(MemoryLayout layout, long align) {
        return switch (layout) {
            case PaddingLayout p -> p;
            case ValueLayout v -> v.withByteAlignment(align);
            case GroupLayout g -> {
                MemoryLayout[] alignedMembers = g.memberLayouts().stream()
                        .map(m -> align(m, align)).toArray(MemoryLayout[]::new);
                yield g instanceof StructLayout ?
                        MemoryLayout.structLayout(alignedMembers) : MemoryLayout.unionLayout(alignedMembers);
            }
            case SequenceLayout s -> MemoryLayout.sequenceLayout(s.elementCount(), align(s.elementLayout(), align));
        };
    }


    static {
        System.loadLibrary("freeimage4java");
    }

    static final SymbolLookup SYMBOL_LOOKUP = SymbolLookup.loaderLookup()
            .or(Linker.nativeLinker().defaultLookup());

    public static final ValueLayout.OfBoolean C_BOOL = ValueLayout.JAVA_BOOLEAN;
    public static final ValueLayout.OfByte C_CHAR = ValueLayout.JAVA_BYTE;
    public static final ValueLayout.OfShort C_SHORT = ValueLayout.JAVA_SHORT;
    public static final ValueLayout.OfInt C_INT = ValueLayout.JAVA_INT;
    public static final ValueLayout.OfLong C_LONG_LONG = ValueLayout.JAVA_LONG;
    public static final ValueLayout.OfFloat C_FLOAT = ValueLayout.JAVA_FLOAT;
    public static final ValueLayout.OfDouble C_DOUBLE = ValueLayout.JAVA_DOUBLE;
    public static final AddressLayout C_POINTER = ValueLayout.ADDRESS
            .withTargetLayout(MemoryLayout.sequenceLayout(java.lang.Long.MAX_VALUE, JAVA_BYTE));
    public static final ValueLayout.OfLong C_LONG = ValueLayout.JAVA_LONG;
    private static final int FREEIMAGE_MAJOR_VERSION = (int)3L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_MAJOR_VERSION 3
     * }
     */
    public static int FREEIMAGE_MAJOR_VERSION() {
        return FREEIMAGE_MAJOR_VERSION;
    }
    private static final int FREEIMAGE_MINOR_VERSION = (int)18L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_MINOR_VERSION 18
     * }
     */
    public static int FREEIMAGE_MINOR_VERSION() {
        return FREEIMAGE_MINOR_VERSION;
    }
    private static final int FREEIMAGE_RELEASE_SERIAL = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_RELEASE_SERIAL 0
     * }
     */
    public static int FREEIMAGE_RELEASE_SERIAL() {
        return FREEIMAGE_RELEASE_SERIAL;
    }
    private static final int __GNUC_VA_LIST = (int)1L;
    /**
     * {@snippet lang=c :
     * #define __GNUC_VA_LIST 1
     * }
     */
    public static int __GNUC_VA_LIST() {
        return __GNUC_VA_LIST;
    }
    private static final int FREEIMAGE_COLORORDER_BGR = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_COLORORDER_BGR 0
     * }
     */
    public static int FREEIMAGE_COLORORDER_BGR() {
        return FREEIMAGE_COLORORDER_BGR;
    }
    private static final int FREEIMAGE_COLORORDER_RGB = (int)1L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_COLORORDER_RGB 1
     * }
     */
    public static int FREEIMAGE_COLORORDER_RGB() {
        return FREEIMAGE_COLORORDER_RGB;
    }
    private static final int FALSE = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FALSE 0
     * }
     */
    public static int FALSE() {
        return FALSE;
    }
    private static final int TRUE = (int)1L;
    /**
     * {@snippet lang=c :
     * #define TRUE 1
     * }
     */
    public static int TRUE() {
        return TRUE;
    }
    private static final int SEEK_SET = (int)0L;
    /**
     * {@snippet lang=c :
     * #define SEEK_SET 0
     * }
     */
    public static int SEEK_SET() {
        return SEEK_SET;
    }
    private static final int SEEK_CUR = (int)1L;
    /**
     * {@snippet lang=c :
     * #define SEEK_CUR 1
     * }
     */
    public static int SEEK_CUR() {
        return SEEK_CUR;
    }
    private static final int SEEK_END = (int)2L;
    /**
     * {@snippet lang=c :
     * #define SEEK_END 2
     * }
     */
    public static int SEEK_END() {
        return SEEK_END;
    }
    private static final int FI_RGBA_RED = (int)2L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_RED 2
     * }
     */
    public static int FI_RGBA_RED() {
        return FI_RGBA_RED;
    }
    private static final int FI_RGBA_GREEN = (int)1L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_GREEN 1
     * }
     */
    public static int FI_RGBA_GREEN() {
        return FI_RGBA_GREEN;
    }
    private static final int FI_RGBA_BLUE = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_BLUE 0
     * }
     */
    public static int FI_RGBA_BLUE() {
        return FI_RGBA_BLUE;
    }
    private static final int FI_RGBA_ALPHA = (int)3L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_ALPHA 3
     * }
     */
    public static int FI_RGBA_ALPHA() {
        return FI_RGBA_ALPHA;
    }
    private static final int FI_RGBA_RED_MASK = (int)16711680L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_RED_MASK 16711680
     * }
     */
    public static int FI_RGBA_RED_MASK() {
        return FI_RGBA_RED_MASK;
    }
    private static final int FI_RGBA_GREEN_MASK = (int)65280L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_GREEN_MASK 65280
     * }
     */
    public static int FI_RGBA_GREEN_MASK() {
        return FI_RGBA_GREEN_MASK;
    }
    private static final int FI_RGBA_BLUE_MASK = (int)255L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_BLUE_MASK 255
     * }
     */
    public static int FI_RGBA_BLUE_MASK() {
        return FI_RGBA_BLUE_MASK;
    }
    private static final int FI_RGBA_RED_SHIFT = (int)16L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_RED_SHIFT 16
     * }
     */
    public static int FI_RGBA_RED_SHIFT() {
        return FI_RGBA_RED_SHIFT;
    }
    private static final int FI_RGBA_GREEN_SHIFT = (int)8L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_GREEN_SHIFT 8
     * }
     */
    public static int FI_RGBA_GREEN_SHIFT() {
        return FI_RGBA_GREEN_SHIFT;
    }
    private static final int FI_RGBA_BLUE_SHIFT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_BLUE_SHIFT 0
     * }
     */
    public static int FI_RGBA_BLUE_SHIFT() {
        return FI_RGBA_BLUE_SHIFT;
    }
    private static final int FI_RGBA_ALPHA_SHIFT = (int)24L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_ALPHA_SHIFT 24
     * }
     */
    public static int FI_RGBA_ALPHA_SHIFT() {
        return FI_RGBA_ALPHA_SHIFT;
    }
    private static final int FI16_555_RED_MASK = (int)31744L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_RED_MASK 31744
     * }
     */
    public static int FI16_555_RED_MASK() {
        return FI16_555_RED_MASK;
    }
    private static final int FI16_555_GREEN_MASK = (int)992L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_GREEN_MASK 992
     * }
     */
    public static int FI16_555_GREEN_MASK() {
        return FI16_555_GREEN_MASK;
    }
    private static final int FI16_555_BLUE_MASK = (int)31L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_BLUE_MASK 31
     * }
     */
    public static int FI16_555_BLUE_MASK() {
        return FI16_555_BLUE_MASK;
    }
    private static final int FI16_555_RED_SHIFT = (int)10L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_RED_SHIFT 10
     * }
     */
    public static int FI16_555_RED_SHIFT() {
        return FI16_555_RED_SHIFT;
    }
    private static final int FI16_555_GREEN_SHIFT = (int)5L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_GREEN_SHIFT 5
     * }
     */
    public static int FI16_555_GREEN_SHIFT() {
        return FI16_555_GREEN_SHIFT;
    }
    private static final int FI16_555_BLUE_SHIFT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI16_555_BLUE_SHIFT 0
     * }
     */
    public static int FI16_555_BLUE_SHIFT() {
        return FI16_555_BLUE_SHIFT;
    }
    private static final int FI16_565_RED_MASK = (int)63488L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_RED_MASK 63488
     * }
     */
    public static int FI16_565_RED_MASK() {
        return FI16_565_RED_MASK;
    }
    private static final int FI16_565_GREEN_MASK = (int)2016L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_GREEN_MASK 2016
     * }
     */
    public static int FI16_565_GREEN_MASK() {
        return FI16_565_GREEN_MASK;
    }
    private static final int FI16_565_BLUE_MASK = (int)31L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_BLUE_MASK 31
     * }
     */
    public static int FI16_565_BLUE_MASK() {
        return FI16_565_BLUE_MASK;
    }
    private static final int FI16_565_RED_SHIFT = (int)11L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_RED_SHIFT 11
     * }
     */
    public static int FI16_565_RED_SHIFT() {
        return FI16_565_RED_SHIFT;
    }
    private static final int FI16_565_GREEN_SHIFT = (int)5L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_GREEN_SHIFT 5
     * }
     */
    public static int FI16_565_GREEN_SHIFT() {
        return FI16_565_GREEN_SHIFT;
    }
    private static final int FI16_565_BLUE_SHIFT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI16_565_BLUE_SHIFT 0
     * }
     */
    public static int FI16_565_BLUE_SHIFT() {
        return FI16_565_BLUE_SHIFT;
    }
    private static final int FIICC_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FIICC_DEFAULT 0
     * }
     */
    public static int FIICC_DEFAULT() {
        return FIICC_DEFAULT;
    }
    private static final int FIICC_COLOR_IS_CMYK = (int)1L;
    /**
     * {@snippet lang=c :
     * #define FIICC_COLOR_IS_CMYK 1
     * }
     */
    public static int FIICC_COLOR_IS_CMYK() {
        return FIICC_COLOR_IS_CMYK;
    }
    private static final int FIF_LOAD_NOPIXELS = (int)32768L;
    /**
     * {@snippet lang=c :
     * #define FIF_LOAD_NOPIXELS 32768
     * }
     */
    public static int FIF_LOAD_NOPIXELS() {
        return FIF_LOAD_NOPIXELS;
    }
    private static final int BMP_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define BMP_DEFAULT 0
     * }
     */
    public static int BMP_DEFAULT() {
        return BMP_DEFAULT;
    }
    private static final int BMP_SAVE_RLE = (int)1L;
    /**
     * {@snippet lang=c :
     * #define BMP_SAVE_RLE 1
     * }
     */
    public static int BMP_SAVE_RLE() {
        return BMP_SAVE_RLE;
    }
    private static final int CUT_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define CUT_DEFAULT 0
     * }
     */
    public static int CUT_DEFAULT() {
        return CUT_DEFAULT;
    }
    private static final int DDS_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define DDS_DEFAULT 0
     * }
     */
    public static int DDS_DEFAULT() {
        return DDS_DEFAULT;
    }
    private static final int EXR_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define EXR_DEFAULT 0
     * }
     */
    public static int EXR_DEFAULT() {
        return EXR_DEFAULT;
    }
    private static final int EXR_FLOAT = (int)1L;
    /**
     * {@snippet lang=c :
     * #define EXR_FLOAT 1
     * }
     */
    public static int EXR_FLOAT() {
        return EXR_FLOAT;
    }
    private static final int EXR_NONE = (int)2L;
    /**
     * {@snippet lang=c :
     * #define EXR_NONE 2
     * }
     */
    public static int EXR_NONE() {
        return EXR_NONE;
    }
    private static final int EXR_ZIP = (int)4L;
    /**
     * {@snippet lang=c :
     * #define EXR_ZIP 4
     * }
     */
    public static int EXR_ZIP() {
        return EXR_ZIP;
    }
    private static final int EXR_PIZ = (int)8L;
    /**
     * {@snippet lang=c :
     * #define EXR_PIZ 8
     * }
     */
    public static int EXR_PIZ() {
        return EXR_PIZ;
    }
    private static final int EXR_PXR24 = (int)16L;
    /**
     * {@snippet lang=c :
     * #define EXR_PXR24 16
     * }
     */
    public static int EXR_PXR24() {
        return EXR_PXR24;
    }
    private static final int EXR_B44 = (int)32L;
    /**
     * {@snippet lang=c :
     * #define EXR_B44 32
     * }
     */
    public static int EXR_B44() {
        return EXR_B44;
    }
    private static final int EXR_LC = (int)64L;
    /**
     * {@snippet lang=c :
     * #define EXR_LC 64
     * }
     */
    public static int EXR_LC() {
        return EXR_LC;
    }
    private static final int FAXG3_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FAXG3_DEFAULT 0
     * }
     */
    public static int FAXG3_DEFAULT() {
        return FAXG3_DEFAULT;
    }
    private static final int GIF_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define GIF_DEFAULT 0
     * }
     */
    public static int GIF_DEFAULT() {
        return GIF_DEFAULT;
    }
    private static final int GIF_LOAD256 = (int)1L;
    /**
     * {@snippet lang=c :
     * #define GIF_LOAD256 1
     * }
     */
    public static int GIF_LOAD256() {
        return GIF_LOAD256;
    }
    private static final int GIF_PLAYBACK = (int)2L;
    /**
     * {@snippet lang=c :
     * #define GIF_PLAYBACK 2
     * }
     */
    public static int GIF_PLAYBACK() {
        return GIF_PLAYBACK;
    }
    private static final int HDR_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define HDR_DEFAULT 0
     * }
     */
    public static int HDR_DEFAULT() {
        return HDR_DEFAULT;
    }
    private static final int ICO_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define ICO_DEFAULT 0
     * }
     */
    public static int ICO_DEFAULT() {
        return ICO_DEFAULT;
    }
    private static final int ICO_MAKEALPHA = (int)1L;
    /**
     * {@snippet lang=c :
     * #define ICO_MAKEALPHA 1
     * }
     */
    public static int ICO_MAKEALPHA() {
        return ICO_MAKEALPHA;
    }
    private static final int IFF_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define IFF_DEFAULT 0
     * }
     */
    public static int IFF_DEFAULT() {
        return IFF_DEFAULT;
    }
    private static final int J2K_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define J2K_DEFAULT 0
     * }
     */
    public static int J2K_DEFAULT() {
        return J2K_DEFAULT;
    }
    private static final int JP2_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define JP2_DEFAULT 0
     * }
     */
    public static int JP2_DEFAULT() {
        return JP2_DEFAULT;
    }
    private static final int JPEG_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define JPEG_DEFAULT 0
     * }
     */
    public static int JPEG_DEFAULT() {
        return JPEG_DEFAULT;
    }
    private static final int JPEG_FAST = (int)1L;
    /**
     * {@snippet lang=c :
     * #define JPEG_FAST 1
     * }
     */
    public static int JPEG_FAST() {
        return JPEG_FAST;
    }
    private static final int JPEG_ACCURATE = (int)2L;
    /**
     * {@snippet lang=c :
     * #define JPEG_ACCURATE 2
     * }
     */
    public static int JPEG_ACCURATE() {
        return JPEG_ACCURATE;
    }
    private static final int JPEG_CMYK = (int)4L;
    /**
     * {@snippet lang=c :
     * #define JPEG_CMYK 4
     * }
     */
    public static int JPEG_CMYK() {
        return JPEG_CMYK;
    }
    private static final int JPEG_EXIFROTATE = (int)8L;
    /**
     * {@snippet lang=c :
     * #define JPEG_EXIFROTATE 8
     * }
     */
    public static int JPEG_EXIFROTATE() {
        return JPEG_EXIFROTATE;
    }
    private static final int JPEG_GREYSCALE = (int)16L;
    /**
     * {@snippet lang=c :
     * #define JPEG_GREYSCALE 16
     * }
     */
    public static int JPEG_GREYSCALE() {
        return JPEG_GREYSCALE;
    }
    private static final int JPEG_QUALITYSUPERB = (int)128L;
    /**
     * {@snippet lang=c :
     * #define JPEG_QUALITYSUPERB 128
     * }
     */
    public static int JPEG_QUALITYSUPERB() {
        return JPEG_QUALITYSUPERB;
    }
    private static final int JPEG_QUALITYGOOD = (int)256L;
    /**
     * {@snippet lang=c :
     * #define JPEG_QUALITYGOOD 256
     * }
     */
    public static int JPEG_QUALITYGOOD() {
        return JPEG_QUALITYGOOD;
    }
    private static final int JPEG_QUALITYNORMAL = (int)512L;
    /**
     * {@snippet lang=c :
     * #define JPEG_QUALITYNORMAL 512
     * }
     */
    public static int JPEG_QUALITYNORMAL() {
        return JPEG_QUALITYNORMAL;
    }
    private static final int JPEG_QUALITYAVERAGE = (int)1024L;
    /**
     * {@snippet lang=c :
     * #define JPEG_QUALITYAVERAGE 1024
     * }
     */
    public static int JPEG_QUALITYAVERAGE() {
        return JPEG_QUALITYAVERAGE;
    }
    private static final int JPEG_QUALITYBAD = (int)2048L;
    /**
     * {@snippet lang=c :
     * #define JPEG_QUALITYBAD 2048
     * }
     */
    public static int JPEG_QUALITYBAD() {
        return JPEG_QUALITYBAD;
    }
    private static final int JPEG_PROGRESSIVE = (int)8192L;
    /**
     * {@snippet lang=c :
     * #define JPEG_PROGRESSIVE 8192
     * }
     */
    public static int JPEG_PROGRESSIVE() {
        return JPEG_PROGRESSIVE;
    }
    private static final int JPEG_SUBSAMPLING_411 = (int)4096L;
    /**
     * {@snippet lang=c :
     * #define JPEG_SUBSAMPLING_411 4096
     * }
     */
    public static int JPEG_SUBSAMPLING_411() {
        return JPEG_SUBSAMPLING_411;
    }
    private static final int JPEG_SUBSAMPLING_420 = (int)16384L;
    /**
     * {@snippet lang=c :
     * #define JPEG_SUBSAMPLING_420 16384
     * }
     */
    public static int JPEG_SUBSAMPLING_420() {
        return JPEG_SUBSAMPLING_420;
    }
    private static final int JPEG_SUBSAMPLING_422 = (int)32768L;
    /**
     * {@snippet lang=c :
     * #define JPEG_SUBSAMPLING_422 32768
     * }
     */
    public static int JPEG_SUBSAMPLING_422() {
        return JPEG_SUBSAMPLING_422;
    }
    private static final int JPEG_SUBSAMPLING_444 = (int)65536L;
    /**
     * {@snippet lang=c :
     * #define JPEG_SUBSAMPLING_444 65536
     * }
     */
    public static int JPEG_SUBSAMPLING_444() {
        return JPEG_SUBSAMPLING_444;
    }
    private static final int JPEG_OPTIMIZE = (int)131072L;
    /**
     * {@snippet lang=c :
     * #define JPEG_OPTIMIZE 131072
     * }
     */
    public static int JPEG_OPTIMIZE() {
        return JPEG_OPTIMIZE;
    }
    private static final int JPEG_BASELINE = (int)262144L;
    /**
     * {@snippet lang=c :
     * #define JPEG_BASELINE 262144
     * }
     */
    public static int JPEG_BASELINE() {
        return JPEG_BASELINE;
    }
    private static final int KOALA_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define KOALA_DEFAULT 0
     * }
     */
    public static int KOALA_DEFAULT() {
        return KOALA_DEFAULT;
    }
    private static final int LBM_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define LBM_DEFAULT 0
     * }
     */
    public static int LBM_DEFAULT() {
        return LBM_DEFAULT;
    }
    private static final int MNG_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define MNG_DEFAULT 0
     * }
     */
    public static int MNG_DEFAULT() {
        return MNG_DEFAULT;
    }
    private static final int PCD_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PCD_DEFAULT 0
     * }
     */
    public static int PCD_DEFAULT() {
        return PCD_DEFAULT;
    }
    private static final int PCD_BASE = (int)1L;
    /**
     * {@snippet lang=c :
     * #define PCD_BASE 1
     * }
     */
    public static int PCD_BASE() {
        return PCD_BASE;
    }
    private static final int PCD_BASEDIV4 = (int)2L;
    /**
     * {@snippet lang=c :
     * #define PCD_BASEDIV4 2
     * }
     */
    public static int PCD_BASEDIV4() {
        return PCD_BASEDIV4;
    }
    private static final int PCD_BASEDIV16 = (int)3L;
    /**
     * {@snippet lang=c :
     * #define PCD_BASEDIV16 3
     * }
     */
    public static int PCD_BASEDIV16() {
        return PCD_BASEDIV16;
    }
    private static final int PCX_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PCX_DEFAULT 0
     * }
     */
    public static int PCX_DEFAULT() {
        return PCX_DEFAULT;
    }
    private static final int PFM_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PFM_DEFAULT 0
     * }
     */
    public static int PFM_DEFAULT() {
        return PFM_DEFAULT;
    }
    private static final int PICT_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PICT_DEFAULT 0
     * }
     */
    public static int PICT_DEFAULT() {
        return PICT_DEFAULT;
    }
    private static final int PNG_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PNG_DEFAULT 0
     * }
     */
    public static int PNG_DEFAULT() {
        return PNG_DEFAULT;
    }
    private static final int PNG_IGNOREGAMMA = (int)1L;
    /**
     * {@snippet lang=c :
     * #define PNG_IGNOREGAMMA 1
     * }
     */
    public static int PNG_IGNOREGAMMA() {
        return PNG_IGNOREGAMMA;
    }
    private static final int PNG_Z_BEST_SPEED = (int)1L;
    /**
     * {@snippet lang=c :
     * #define PNG_Z_BEST_SPEED 1
     * }
     */
    public static int PNG_Z_BEST_SPEED() {
        return PNG_Z_BEST_SPEED;
    }
    private static final int PNG_Z_DEFAULT_COMPRESSION = (int)6L;
    /**
     * {@snippet lang=c :
     * #define PNG_Z_DEFAULT_COMPRESSION 6
     * }
     */
    public static int PNG_Z_DEFAULT_COMPRESSION() {
        return PNG_Z_DEFAULT_COMPRESSION;
    }
    private static final int PNG_Z_BEST_COMPRESSION = (int)9L;
    /**
     * {@snippet lang=c :
     * #define PNG_Z_BEST_COMPRESSION 9
     * }
     */
    public static int PNG_Z_BEST_COMPRESSION() {
        return PNG_Z_BEST_COMPRESSION;
    }
    private static final int PNG_Z_NO_COMPRESSION = (int)256L;
    /**
     * {@snippet lang=c :
     * #define PNG_Z_NO_COMPRESSION 256
     * }
     */
    public static int PNG_Z_NO_COMPRESSION() {
        return PNG_Z_NO_COMPRESSION;
    }
    private static final int PNG_INTERLACED = (int)512L;
    /**
     * {@snippet lang=c :
     * #define PNG_INTERLACED 512
     * }
     */
    public static int PNG_INTERLACED() {
        return PNG_INTERLACED;
    }
    private static final int PNM_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PNM_DEFAULT 0
     * }
     */
    public static int PNM_DEFAULT() {
        return PNM_DEFAULT;
    }
    private static final int PNM_SAVE_RAW = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PNM_SAVE_RAW 0
     * }
     */
    public static int PNM_SAVE_RAW() {
        return PNM_SAVE_RAW;
    }
    private static final int PNM_SAVE_ASCII = (int)1L;
    /**
     * {@snippet lang=c :
     * #define PNM_SAVE_ASCII 1
     * }
     */
    public static int PNM_SAVE_ASCII() {
        return PNM_SAVE_ASCII;
    }
    private static final int PSD_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define PSD_DEFAULT 0
     * }
     */
    public static int PSD_DEFAULT() {
        return PSD_DEFAULT;
    }
    private static final int PSD_CMYK = (int)1L;
    /**
     * {@snippet lang=c :
     * #define PSD_CMYK 1
     * }
     */
    public static int PSD_CMYK() {
        return PSD_CMYK;
    }
    private static final int PSD_LAB = (int)2L;
    /**
     * {@snippet lang=c :
     * #define PSD_LAB 2
     * }
     */
    public static int PSD_LAB() {
        return PSD_LAB;
    }
    private static final int PSD_NONE = (int)256L;
    /**
     * {@snippet lang=c :
     * #define PSD_NONE 256
     * }
     */
    public static int PSD_NONE() {
        return PSD_NONE;
    }
    private static final int PSD_RLE = (int)512L;
    /**
     * {@snippet lang=c :
     * #define PSD_RLE 512
     * }
     */
    public static int PSD_RLE() {
        return PSD_RLE;
    }
    private static final int PSD_PSB = (int)8192L;
    /**
     * {@snippet lang=c :
     * #define PSD_PSB 8192
     * }
     */
    public static int PSD_PSB() {
        return PSD_PSB;
    }
    private static final int RAS_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define RAS_DEFAULT 0
     * }
     */
    public static int RAS_DEFAULT() {
        return RAS_DEFAULT;
    }
    private static final int RAW_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define RAW_DEFAULT 0
     * }
     */
    public static int RAW_DEFAULT() {
        return RAW_DEFAULT;
    }
    private static final int RAW_PREVIEW = (int)1L;
    /**
     * {@snippet lang=c :
     * #define RAW_PREVIEW 1
     * }
     */
    public static int RAW_PREVIEW() {
        return RAW_PREVIEW;
    }
    private static final int RAW_DISPLAY = (int)2L;
    /**
     * {@snippet lang=c :
     * #define RAW_DISPLAY 2
     * }
     */
    public static int RAW_DISPLAY() {
        return RAW_DISPLAY;
    }
    private static final int RAW_HALFSIZE = (int)4L;
    /**
     * {@snippet lang=c :
     * #define RAW_HALFSIZE 4
     * }
     */
    public static int RAW_HALFSIZE() {
        return RAW_HALFSIZE;
    }
    private static final int RAW_UNPROCESSED = (int)8L;
    /**
     * {@snippet lang=c :
     * #define RAW_UNPROCESSED 8
     * }
     */
    public static int RAW_UNPROCESSED() {
        return RAW_UNPROCESSED;
    }
    private static final int SGI_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define SGI_DEFAULT 0
     * }
     */
    public static int SGI_DEFAULT() {
        return SGI_DEFAULT;
    }
    private static final int TARGA_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define TARGA_DEFAULT 0
     * }
     */
    public static int TARGA_DEFAULT() {
        return TARGA_DEFAULT;
    }
    private static final int TARGA_LOAD_RGB888 = (int)1L;
    /**
     * {@snippet lang=c :
     * #define TARGA_LOAD_RGB888 1
     * }
     */
    public static int TARGA_LOAD_RGB888() {
        return TARGA_LOAD_RGB888;
    }
    private static final int TARGA_SAVE_RLE = (int)2L;
    /**
     * {@snippet lang=c :
     * #define TARGA_SAVE_RLE 2
     * }
     */
    public static int TARGA_SAVE_RLE() {
        return TARGA_SAVE_RLE;
    }
    private static final int TIFF_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define TIFF_DEFAULT 0
     * }
     */
    public static int TIFF_DEFAULT() {
        return TIFF_DEFAULT;
    }
    private static final int TIFF_CMYK = (int)1L;
    /**
     * {@snippet lang=c :
     * #define TIFF_CMYK 1
     * }
     */
    public static int TIFF_CMYK() {
        return TIFF_CMYK;
    }
    private static final int TIFF_PACKBITS = (int)256L;
    /**
     * {@snippet lang=c :
     * #define TIFF_PACKBITS 256
     * }
     */
    public static int TIFF_PACKBITS() {
        return TIFF_PACKBITS;
    }
    private static final int TIFF_DEFLATE = (int)512L;
    /**
     * {@snippet lang=c :
     * #define TIFF_DEFLATE 512
     * }
     */
    public static int TIFF_DEFLATE() {
        return TIFF_DEFLATE;
    }
    private static final int TIFF_ADOBE_DEFLATE = (int)1024L;
    /**
     * {@snippet lang=c :
     * #define TIFF_ADOBE_DEFLATE 1024
     * }
     */
    public static int TIFF_ADOBE_DEFLATE() {
        return TIFF_ADOBE_DEFLATE;
    }
    private static final int TIFF_NONE = (int)2048L;
    /**
     * {@snippet lang=c :
     * #define TIFF_NONE 2048
     * }
     */
    public static int TIFF_NONE() {
        return TIFF_NONE;
    }
    private static final int TIFF_CCITTFAX3 = (int)4096L;
    /**
     * {@snippet lang=c :
     * #define TIFF_CCITTFAX3 4096
     * }
     */
    public static int TIFF_CCITTFAX3() {
        return TIFF_CCITTFAX3;
    }
    private static final int TIFF_CCITTFAX4 = (int)8192L;
    /**
     * {@snippet lang=c :
     * #define TIFF_CCITTFAX4 8192
     * }
     */
    public static int TIFF_CCITTFAX4() {
        return TIFF_CCITTFAX4;
    }
    private static final int TIFF_LZW = (int)16384L;
    /**
     * {@snippet lang=c :
     * #define TIFF_LZW 16384
     * }
     */
    public static int TIFF_LZW() {
        return TIFF_LZW;
    }
    private static final int TIFF_JPEG = (int)32768L;
    /**
     * {@snippet lang=c :
     * #define TIFF_JPEG 32768
     * }
     */
    public static int TIFF_JPEG() {
        return TIFF_JPEG;
    }
    private static final int TIFF_LOGLUV = (int)65536L;
    /**
     * {@snippet lang=c :
     * #define TIFF_LOGLUV 65536
     * }
     */
    public static int TIFF_LOGLUV() {
        return TIFF_LOGLUV;
    }
    private static final int WBMP_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define WBMP_DEFAULT 0
     * }
     */
    public static int WBMP_DEFAULT() {
        return WBMP_DEFAULT;
    }
    private static final int XBM_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define XBM_DEFAULT 0
     * }
     */
    public static int XBM_DEFAULT() {
        return XBM_DEFAULT;
    }
    private static final int XPM_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define XPM_DEFAULT 0
     * }
     */
    public static int XPM_DEFAULT() {
        return XPM_DEFAULT;
    }
    private static final int WEBP_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define WEBP_DEFAULT 0
     * }
     */
    public static int WEBP_DEFAULT() {
        return WEBP_DEFAULT;
    }
    private static final int WEBP_LOSSLESS = (int)256L;
    /**
     * {@snippet lang=c :
     * #define WEBP_LOSSLESS 256
     * }
     */
    public static int WEBP_LOSSLESS() {
        return WEBP_LOSSLESS;
    }
    private static final int JXR_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define JXR_DEFAULT 0
     * }
     */
    public static int JXR_DEFAULT() {
        return JXR_DEFAULT;
    }
    private static final int JXR_LOSSLESS = (int)100L;
    /**
     * {@snippet lang=c :
     * #define JXR_LOSSLESS 100
     * }
     */
    public static int JXR_LOSSLESS() {
        return JXR_LOSSLESS;
    }
    private static final int JXR_PROGRESSIVE = (int)8192L;
    /**
     * {@snippet lang=c :
     * #define JXR_PROGRESSIVE 8192
     * }
     */
    public static int JXR_PROGRESSIVE() {
        return JXR_PROGRESSIVE;
    }
    private static final int FI_COLOR_IS_RGB_COLOR = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI_COLOR_IS_RGB_COLOR 0
     * }
     */
    public static int FI_COLOR_IS_RGB_COLOR() {
        return FI_COLOR_IS_RGB_COLOR;
    }
    private static final int FI_COLOR_IS_RGBA_COLOR = (int)1L;
    /**
     * {@snippet lang=c :
     * #define FI_COLOR_IS_RGBA_COLOR 1
     * }
     */
    public static int FI_COLOR_IS_RGBA_COLOR() {
        return FI_COLOR_IS_RGBA_COLOR;
    }
    private static final int FI_COLOR_FIND_EQUAL_COLOR = (int)2L;
    /**
     * {@snippet lang=c :
     * #define FI_COLOR_FIND_EQUAL_COLOR 2
     * }
     */
    public static int FI_COLOR_FIND_EQUAL_COLOR() {
        return FI_COLOR_FIND_EQUAL_COLOR;
    }
    private static final int FI_COLOR_ALPHA_IS_INDEX = (int)4L;
    /**
     * {@snippet lang=c :
     * #define FI_COLOR_ALPHA_IS_INDEX 4
     * }
     */
    public static int FI_COLOR_ALPHA_IS_INDEX() {
        return FI_COLOR_ALPHA_IS_INDEX;
    }
    private static final int FI_RESCALE_DEFAULT = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FI_RESCALE_DEFAULT 0
     * }
     */
    public static int FI_RESCALE_DEFAULT() {
        return FI_RESCALE_DEFAULT;
    }
    private static final int FI_RESCALE_TRUE_COLOR = (int)1L;
    /**
     * {@snippet lang=c :
     * #define FI_RESCALE_TRUE_COLOR 1
     * }
     */
    public static int FI_RESCALE_TRUE_COLOR() {
        return FI_RESCALE_TRUE_COLOR;
    }
    private static final int FI_RESCALE_OMIT_METADATA = (int)2L;
    /**
     * {@snippet lang=c :
     * #define FI_RESCALE_OMIT_METADATA 2
     * }
     */
    public static int FI_RESCALE_OMIT_METADATA() {
        return FI_RESCALE_OMIT_METADATA;
    }
    /**
     * {@snippet lang=c :
     * typedef unsigned long size_t
     * }
     */
    public static final OfLong size_t = Libfreeimage.C_LONG;
    /**
     * {@snippet lang=c :
     * typedef int wchar_t
     * }
     */
    public static final OfInt wchar_t = Libfreeimage.C_INT;
    /**
     * {@snippet lang=c :
     * typedef int32_t BOOL
     * }
     */
    public static final OfInt BOOL = Libfreeimage.C_INT;
    /**
     * {@snippet lang=c :
     * typedef uint8_t BYTE
     * }
     */
    public static final OfByte BYTE = Libfreeimage.C_CHAR;
    /**
     * {@snippet lang=c :
     * typedef uint16_t WORD
     * }
     */
    public static final OfShort WORD = Libfreeimage.C_SHORT;
    /**
     * {@snippet lang=c :
     * typedef uint32_t DWORD
     * }
     */
    public static final OfInt DWORD = Libfreeimage.C_INT;
    /**
     * {@snippet lang=c :
     * typedef int32_t LONG
     * }
     */
    public static final OfInt LONG = Libfreeimage.C_INT;
    /**
     * {@snippet lang=c :
     * typedef int64_t INT64
     * }
     */
    public static final OfLong INT64 = Libfreeimage.C_LONG;
    /**
     * {@snippet lang=c :
     * typedef uint64_t UINT64
     * }
     */
    public static final OfLong UINT64 = Libfreeimage.C_LONG;
    /**
     * {@snippet lang=c :
     * typedef struct tagBITMAPINFOHEADER {
     *     DWORD biSize;
     *     LONG biWidth;
     *     LONG biHeight;
     *     WORD biPlanes;
     *     WORD biBitCount;
     *     DWORD biCompression;
     *     DWORD biSizeImage;
     *     LONG biXPelsPerMeter;
     *     LONG biYPelsPerMeter;
     *     DWORD biClrUsed;
     *     DWORD biClrImportant;
     * } *PBITMAPINFOHEADER
     * }
     */
    public static final AddressLayout PBITMAPINFOHEADER = Libfreeimage.C_POINTER;
    /**
     * {@snippet lang=c :
     * typedef struct tagBITMAPINFO {
     *     BITMAPINFOHEADER bmiHeader;
     *     RGBQUAD bmiColors[1];
     * } *PBITMAPINFO
     * }
     */
    public static final AddressLayout PBITMAPINFO = Libfreeimage.C_POINTER;
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_FORMAT
     * }
     */
    public static final OfInt FREE_IMAGE_FORMAT = Libfreeimage.C_INT;
    private static final int FIF_UNKNOWN = (int)-1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_UNKNOWN = -1
     * }
     */
    public static int FIF_UNKNOWN() {
        return FIF_UNKNOWN;
    }
    private static final int FIF_BMP = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_BMP = 0
     * }
     */
    public static int FIF_BMP() {
        return FIF_BMP;
    }
    private static final int FIF_ICO = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_ICO = 1
     * }
     */
    public static int FIF_ICO() {
        return FIF_ICO;
    }
    private static final int FIF_JPEG = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_JPEG = 2
     * }
     */
    public static int FIF_JPEG() {
        return FIF_JPEG;
    }
    private static final int FIF_JNG = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_JNG = 3
     * }
     */
    public static int FIF_JNG() {
        return FIF_JNG;
    }
    private static final int FIF_KOALA = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_KOALA = 4
     * }
     */
    public static int FIF_KOALA() {
        return FIF_KOALA;
    }
    private static final int FIF_LBM = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_LBM = 5
     * }
     */
    public static int FIF_LBM() {
        return FIF_LBM;
    }
    private static final int FIF_IFF = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_IFF = 5
     * }
     */
    public static int FIF_IFF() {
        return FIF_IFF;
    }
    private static final int FIF_MNG = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_MNG = 6
     * }
     */
    public static int FIF_MNG() {
        return FIF_MNG;
    }
    private static final int FIF_PBM = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PBM = 7
     * }
     */
    public static int FIF_PBM() {
        return FIF_PBM;
    }
    private static final int FIF_PBMRAW = (int)8L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PBMRAW = 8
     * }
     */
    public static int FIF_PBMRAW() {
        return FIF_PBMRAW;
    }
    private static final int FIF_PCD = (int)9L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PCD = 9
     * }
     */
    public static int FIF_PCD() {
        return FIF_PCD;
    }
    private static final int FIF_PCX = (int)10L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PCX = 10
     * }
     */
    public static int FIF_PCX() {
        return FIF_PCX;
    }
    private static final int FIF_PGM = (int)11L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PGM = 11
     * }
     */
    public static int FIF_PGM() {
        return FIF_PGM;
    }
    private static final int FIF_PGMRAW = (int)12L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PGMRAW = 12
     * }
     */
    public static int FIF_PGMRAW() {
        return FIF_PGMRAW;
    }
    private static final int FIF_PNG = (int)13L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PNG = 13
     * }
     */
    public static int FIF_PNG() {
        return FIF_PNG;
    }
    private static final int FIF_PPM = (int)14L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PPM = 14
     * }
     */
    public static int FIF_PPM() {
        return FIF_PPM;
    }
    private static final int FIF_PPMRAW = (int)15L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PPMRAW = 15
     * }
     */
    public static int FIF_PPMRAW() {
        return FIF_PPMRAW;
    }
    private static final int FIF_RAS = (int)16L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_RAS = 16
     * }
     */
    public static int FIF_RAS() {
        return FIF_RAS;
    }
    private static final int FIF_TARGA = (int)17L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_TARGA = 17
     * }
     */
    public static int FIF_TARGA() {
        return FIF_TARGA;
    }
    private static final int FIF_TIFF = (int)18L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_TIFF = 18
     * }
     */
    public static int FIF_TIFF() {
        return FIF_TIFF;
    }
    private static final int FIF_WBMP = (int)19L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_WBMP = 19
     * }
     */
    public static int FIF_WBMP() {
        return FIF_WBMP;
    }
    private static final int FIF_PSD = (int)20L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PSD = 20
     * }
     */
    public static int FIF_PSD() {
        return FIF_PSD;
    }
    private static final int FIF_CUT = (int)21L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_CUT = 21
     * }
     */
    public static int FIF_CUT() {
        return FIF_CUT;
    }
    private static final int FIF_XBM = (int)22L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_XBM = 22
     * }
     */
    public static int FIF_XBM() {
        return FIF_XBM;
    }
    private static final int FIF_XPM = (int)23L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_XPM = 23
     * }
     */
    public static int FIF_XPM() {
        return FIF_XPM;
    }
    private static final int FIF_DDS = (int)24L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_DDS = 24
     * }
     */
    public static int FIF_DDS() {
        return FIF_DDS;
    }
    private static final int FIF_GIF = (int)25L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_GIF = 25
     * }
     */
    public static int FIF_GIF() {
        return FIF_GIF;
    }
    private static final int FIF_HDR = (int)26L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_HDR = 26
     * }
     */
    public static int FIF_HDR() {
        return FIF_HDR;
    }
    private static final int FIF_FAXG3 = (int)27L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_FAXG3 = 27
     * }
     */
    public static int FIF_FAXG3() {
        return FIF_FAXG3;
    }
    private static final int FIF_SGI = (int)28L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_SGI = 28
     * }
     */
    public static int FIF_SGI() {
        return FIF_SGI;
    }
    private static final int FIF_EXR = (int)29L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_EXR = 29
     * }
     */
    public static int FIF_EXR() {
        return FIF_EXR;
    }
    private static final int FIF_J2K = (int)30L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_J2K = 30
     * }
     */
    public static int FIF_J2K() {
        return FIF_J2K;
    }
    private static final int FIF_JP2 = (int)31L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_JP2 = 31
     * }
     */
    public static int FIF_JP2() {
        return FIF_JP2;
    }
    private static final int FIF_PFM = (int)32L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PFM = 32
     * }
     */
    public static int FIF_PFM() {
        return FIF_PFM;
    }
    private static final int FIF_PICT = (int)33L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_PICT = 33
     * }
     */
    public static int FIF_PICT() {
        return FIF_PICT;
    }
    private static final int FIF_RAW = (int)34L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_RAW = 34
     * }
     */
    public static int FIF_RAW() {
        return FIF_RAW;
    }
    private static final int FIF_WEBP = (int)35L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_WEBP = 35
     * }
     */
    public static int FIF_WEBP() {
        return FIF_WEBP;
    }
    private static final int FIF_JXR = (int)36L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FORMAT.FIF_JXR = 36
     * }
     */
    public static int FIF_JXR() {
        return FIF_JXR;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_TYPE
     * }
     */
    public static final OfInt FREE_IMAGE_TYPE = Libfreeimage.C_INT;
    private static final int FIT_UNKNOWN = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_UNKNOWN = 0
     * }
     */
    public static int FIT_UNKNOWN() {
        return FIT_UNKNOWN;
    }
    private static final int FIT_BITMAP = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_BITMAP = 1
     * }
     */
    public static int FIT_BITMAP() {
        return FIT_BITMAP;
    }
    private static final int FIT_UINT16 = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_UINT16 = 2
     * }
     */
    public static int FIT_UINT16() {
        return FIT_UINT16;
    }
    private static final int FIT_INT16 = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_INT16 = 3
     * }
     */
    public static int FIT_INT16() {
        return FIT_INT16;
    }
    private static final int FIT_UINT32 = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_UINT32 = 4
     * }
     */
    public static int FIT_UINT32() {
        return FIT_UINT32;
    }
    private static final int FIT_INT32 = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_INT32 = 5
     * }
     */
    public static int FIT_INT32() {
        return FIT_INT32;
    }
    private static final int FIT_FLOAT = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_FLOAT = 6
     * }
     */
    public static int FIT_FLOAT() {
        return FIT_FLOAT;
    }
    private static final int FIT_DOUBLE = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_DOUBLE = 7
     * }
     */
    public static int FIT_DOUBLE() {
        return FIT_DOUBLE;
    }
    private static final int FIT_COMPLEX = (int)8L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_COMPLEX = 8
     * }
     */
    public static int FIT_COMPLEX() {
        return FIT_COMPLEX;
    }
    private static final int FIT_RGB16 = (int)9L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_RGB16 = 9
     * }
     */
    public static int FIT_RGB16() {
        return FIT_RGB16;
    }
    private static final int FIT_RGBA16 = (int)10L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_RGBA16 = 10
     * }
     */
    public static int FIT_RGBA16() {
        return FIT_RGBA16;
    }
    private static final int FIT_RGBF = (int)11L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_RGBF = 11
     * }
     */
    public static int FIT_RGBF() {
        return FIT_RGBF;
    }
    private static final int FIT_RGBAF = (int)12L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TYPE.FIT_RGBAF = 12
     * }
     */
    public static int FIT_RGBAF() {
        return FIT_RGBAF;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_COLOR_TYPE
     * }
     */
    public static final OfInt FREE_IMAGE_COLOR_TYPE = Libfreeimage.C_INT;
    private static final int FIC_MINISWHITE = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_MINISWHITE = 0
     * }
     */
    public static int FIC_MINISWHITE() {
        return FIC_MINISWHITE;
    }
    private static final int FIC_MINISBLACK = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_MINISBLACK = 1
     * }
     */
    public static int FIC_MINISBLACK() {
        return FIC_MINISBLACK;
    }
    private static final int FIC_RGB = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_RGB = 2
     * }
     */
    public static int FIC_RGB() {
        return FIC_RGB;
    }
    private static final int FIC_PALETTE = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_PALETTE = 3
     * }
     */
    public static int FIC_PALETTE() {
        return FIC_PALETTE;
    }
    private static final int FIC_RGBALPHA = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_RGBALPHA = 4
     * }
     */
    public static int FIC_RGBALPHA() {
        return FIC_RGBALPHA;
    }
    private static final int FIC_CMYK = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_TYPE.FIC_CMYK = 5
     * }
     */
    public static int FIC_CMYK() {
        return FIC_CMYK;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_QUANTIZE
     * }
     */
    public static final OfInt FREE_IMAGE_QUANTIZE = Libfreeimage.C_INT;
    private static final int FIQ_WUQUANT = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_QUANTIZE.FIQ_WUQUANT = 0
     * }
     */
    public static int FIQ_WUQUANT() {
        return FIQ_WUQUANT;
    }
    private static final int FIQ_NNQUANT = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_QUANTIZE.FIQ_NNQUANT = 1
     * }
     */
    public static int FIQ_NNQUANT() {
        return FIQ_NNQUANT;
    }
    private static final int FIQ_LFPQUANT = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_QUANTIZE.FIQ_LFPQUANT = 2
     * }
     */
    public static int FIQ_LFPQUANT() {
        return FIQ_LFPQUANT;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_DITHER
     * }
     */
    public static final OfInt FREE_IMAGE_DITHER = Libfreeimage.C_INT;
    private static final int FID_FS = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_FS = 0
     * }
     */
    public static int FID_FS() {
        return FID_FS;
    }
    private static final int FID_BAYER4x4 = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_BAYER4x4 = 1
     * }
     */
    public static int FID_BAYER4x4() {
        return FID_BAYER4x4;
    }
    private static final int FID_BAYER8x8 = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_BAYER8x8 = 2
     * }
     */
    public static int FID_BAYER8x8() {
        return FID_BAYER8x8;
    }
    private static final int FID_CLUSTER6x6 = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_CLUSTER6x6 = 3
     * }
     */
    public static int FID_CLUSTER6x6() {
        return FID_CLUSTER6x6;
    }
    private static final int FID_CLUSTER8x8 = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_CLUSTER8x8 = 4
     * }
     */
    public static int FID_CLUSTER8x8() {
        return FID_CLUSTER8x8;
    }
    private static final int FID_CLUSTER16x16 = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_CLUSTER16x16 = 5
     * }
     */
    public static int FID_CLUSTER16x16() {
        return FID_CLUSTER16x16;
    }
    private static final int FID_BAYER16x16 = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_DITHER.FID_BAYER16x16 = 6
     * }
     */
    public static int FID_BAYER16x16() {
        return FID_BAYER16x16;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_JPEG_OPERATION
     * }
     */
    public static final OfInt FREE_IMAGE_JPEG_OPERATION = Libfreeimage.C_INT;
    private static final int FIJPEG_OP_NONE = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_NONE = 0
     * }
     */
    public static int FIJPEG_OP_NONE() {
        return FIJPEG_OP_NONE;
    }
    private static final int FIJPEG_OP_FLIP_H = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_FLIP_H = 1
     * }
     */
    public static int FIJPEG_OP_FLIP_H() {
        return FIJPEG_OP_FLIP_H;
    }
    private static final int FIJPEG_OP_FLIP_V = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_FLIP_V = 2
     * }
     */
    public static int FIJPEG_OP_FLIP_V() {
        return FIJPEG_OP_FLIP_V;
    }
    private static final int FIJPEG_OP_TRANSPOSE = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_TRANSPOSE = 3
     * }
     */
    public static int FIJPEG_OP_TRANSPOSE() {
        return FIJPEG_OP_TRANSPOSE;
    }
    private static final int FIJPEG_OP_TRANSVERSE = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_TRANSVERSE = 4
     * }
     */
    public static int FIJPEG_OP_TRANSVERSE() {
        return FIJPEG_OP_TRANSVERSE;
    }
    private static final int FIJPEG_OP_ROTATE_90 = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_ROTATE_90 = 5
     * }
     */
    public static int FIJPEG_OP_ROTATE_90() {
        return FIJPEG_OP_ROTATE_90;
    }
    private static final int FIJPEG_OP_ROTATE_180 = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_ROTATE_180 = 6
     * }
     */
    public static int FIJPEG_OP_ROTATE_180() {
        return FIJPEG_OP_ROTATE_180;
    }
    private static final int FIJPEG_OP_ROTATE_270 = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_JPEG_OPERATION.FIJPEG_OP_ROTATE_270 = 7
     * }
     */
    public static int FIJPEG_OP_ROTATE_270() {
        return FIJPEG_OP_ROTATE_270;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_TMO
     * }
     */
    public static final OfInt FREE_IMAGE_TMO = Libfreeimage.C_INT;
    private static final int FITMO_DRAGO03 = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TMO.FITMO_DRAGO03 = 0
     * }
     */
    public static int FITMO_DRAGO03() {
        return FITMO_DRAGO03;
    }
    private static final int FITMO_REINHARD05 = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TMO.FITMO_REINHARD05 = 1
     * }
     */
    public static int FITMO_REINHARD05() {
        return FITMO_REINHARD05;
    }
    private static final int FITMO_FATTAL02 = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_TMO.FITMO_FATTAL02 = 2
     * }
     */
    public static int FITMO_FATTAL02() {
        return FITMO_FATTAL02;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_FILTER
     * }
     */
    public static final OfInt FREE_IMAGE_FILTER = Libfreeimage.C_INT;
    private static final int FILTER_BOX = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_BOX = 0
     * }
     */
    public static int FILTER_BOX() {
        return FILTER_BOX;
    }
    private static final int FILTER_BICUBIC = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_BICUBIC = 1
     * }
     */
    public static int FILTER_BICUBIC() {
        return FILTER_BICUBIC;
    }
    private static final int FILTER_BILINEAR = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_BILINEAR = 2
     * }
     */
    public static int FILTER_BILINEAR() {
        return FILTER_BILINEAR;
    }
    private static final int FILTER_BSPLINE = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_BSPLINE = 3
     * }
     */
    public static int FILTER_BSPLINE() {
        return FILTER_BSPLINE;
    }
    private static final int FILTER_CATMULLROM = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_CATMULLROM = 4
     * }
     */
    public static int FILTER_CATMULLROM() {
        return FILTER_CATMULLROM;
    }
    private static final int FILTER_LANCZOS3 = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_FILTER.FILTER_LANCZOS3 = 5
     * }
     */
    public static int FILTER_LANCZOS3() {
        return FILTER_LANCZOS3;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_COLOR_CHANNEL
     * }
     */
    public static final OfInt FREE_IMAGE_COLOR_CHANNEL = Libfreeimage.C_INT;
    private static final int FICC_RGB = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_RGB = 0
     * }
     */
    public static int FICC_RGB() {
        return FICC_RGB;
    }
    private static final int FICC_RED = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_RED = 1
     * }
     */
    public static int FICC_RED() {
        return FICC_RED;
    }
    private static final int FICC_GREEN = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_GREEN = 2
     * }
     */
    public static int FICC_GREEN() {
        return FICC_GREEN;
    }
    private static final int FICC_BLUE = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_BLUE = 3
     * }
     */
    public static int FICC_BLUE() {
        return FICC_BLUE;
    }
    private static final int FICC_ALPHA = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_ALPHA = 4
     * }
     */
    public static int FICC_ALPHA() {
        return FICC_ALPHA;
    }
    private static final int FICC_BLACK = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_BLACK = 5
     * }
     */
    public static int FICC_BLACK() {
        return FICC_BLACK;
    }
    private static final int FICC_REAL = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_REAL = 6
     * }
     */
    public static int FICC_REAL() {
        return FICC_REAL;
    }
    private static final int FICC_IMAG = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_IMAG = 7
     * }
     */
    public static int FICC_IMAG() {
        return FICC_IMAG;
    }
    private static final int FICC_MAG = (int)8L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_MAG = 8
     * }
     */
    public static int FICC_MAG() {
        return FICC_MAG;
    }
    private static final int FICC_PHASE = (int)9L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_COLOR_CHANNEL.FICC_PHASE = 9
     * }
     */
    public static int FICC_PHASE() {
        return FICC_PHASE;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_MDTYPE
     * }
     */
    public static final OfInt FREE_IMAGE_MDTYPE = Libfreeimage.C_INT;
    private static final int FIDT_NOTYPE = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_NOTYPE = 0
     * }
     */
    public static int FIDT_NOTYPE() {
        return FIDT_NOTYPE;
    }
    private static final int FIDT_BYTE = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_BYTE = 1
     * }
     */
    public static int FIDT_BYTE() {
        return FIDT_BYTE;
    }
    private static final int FIDT_ASCII = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_ASCII = 2
     * }
     */
    public static int FIDT_ASCII() {
        return FIDT_ASCII;
    }
    private static final int FIDT_SHORT = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SHORT = 3
     * }
     */
    public static int FIDT_SHORT() {
        return FIDT_SHORT;
    }
    private static final int FIDT_LONG = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_LONG = 4
     * }
     */
    public static int FIDT_LONG() {
        return FIDT_LONG;
    }
    private static final int FIDT_RATIONAL = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_RATIONAL = 5
     * }
     */
    public static int FIDT_RATIONAL() {
        return FIDT_RATIONAL;
    }
    private static final int FIDT_SBYTE = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SBYTE = 6
     * }
     */
    public static int FIDT_SBYTE() {
        return FIDT_SBYTE;
    }
    private static final int FIDT_UNDEFINED = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_UNDEFINED = 7
     * }
     */
    public static int FIDT_UNDEFINED() {
        return FIDT_UNDEFINED;
    }
    private static final int FIDT_SSHORT = (int)8L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SSHORT = 8
     * }
     */
    public static int FIDT_SSHORT() {
        return FIDT_SSHORT;
    }
    private static final int FIDT_SLONG = (int)9L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SLONG = 9
     * }
     */
    public static int FIDT_SLONG() {
        return FIDT_SLONG;
    }
    private static final int FIDT_SRATIONAL = (int)10L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SRATIONAL = 10
     * }
     */
    public static int FIDT_SRATIONAL() {
        return FIDT_SRATIONAL;
    }
    private static final int FIDT_FLOAT = (int)11L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_FLOAT = 11
     * }
     */
    public static int FIDT_FLOAT() {
        return FIDT_FLOAT;
    }
    private static final int FIDT_DOUBLE = (int)12L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_DOUBLE = 12
     * }
     */
    public static int FIDT_DOUBLE() {
        return FIDT_DOUBLE;
    }
    private static final int FIDT_IFD = (int)13L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_IFD = 13
     * }
     */
    public static int FIDT_IFD() {
        return FIDT_IFD;
    }
    private static final int FIDT_PALETTE = (int)14L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_PALETTE = 14
     * }
     */
    public static int FIDT_PALETTE() {
        return FIDT_PALETTE;
    }
    private static final int FIDT_LONG8 = (int)16L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_LONG8 = 16
     * }
     */
    public static int FIDT_LONG8() {
        return FIDT_LONG8;
    }
    private static final int FIDT_SLONG8 = (int)17L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_SLONG8 = 17
     * }
     */
    public static int FIDT_SLONG8() {
        return FIDT_SLONG8;
    }
    private static final int FIDT_IFD8 = (int)18L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDTYPE.FIDT_IFD8 = 18
     * }
     */
    public static int FIDT_IFD8() {
        return FIDT_IFD8;
    }
    /**
     * {@snippet lang=c :
     * typedef int FREE_IMAGE_MDMODEL
     * }
     */
    public static final OfInt FREE_IMAGE_MDMODEL = Libfreeimage.C_INT;
    private static final int FIMD_NODATA = (int)-1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_NODATA = -1
     * }
     */
    public static int FIMD_NODATA() {
        return FIMD_NODATA;
    }
    private static final int FIMD_COMMENTS = (int)0L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_COMMENTS = 0
     * }
     */
    public static int FIMD_COMMENTS() {
        return FIMD_COMMENTS;
    }
    private static final int FIMD_EXIF_MAIN = (int)1L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_MAIN = 1
     * }
     */
    public static int FIMD_EXIF_MAIN() {
        return FIMD_EXIF_MAIN;
    }
    private static final int FIMD_EXIF_EXIF = (int)2L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_EXIF = 2
     * }
     */
    public static int FIMD_EXIF_EXIF() {
        return FIMD_EXIF_EXIF;
    }
    private static final int FIMD_EXIF_GPS = (int)3L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_GPS = 3
     * }
     */
    public static int FIMD_EXIF_GPS() {
        return FIMD_EXIF_GPS;
    }
    private static final int FIMD_EXIF_MAKERNOTE = (int)4L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_MAKERNOTE = 4
     * }
     */
    public static int FIMD_EXIF_MAKERNOTE() {
        return FIMD_EXIF_MAKERNOTE;
    }
    private static final int FIMD_EXIF_INTEROP = (int)5L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_INTEROP = 5
     * }
     */
    public static int FIMD_EXIF_INTEROP() {
        return FIMD_EXIF_INTEROP;
    }
    private static final int FIMD_IPTC = (int)6L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_IPTC = 6
     * }
     */
    public static int FIMD_IPTC() {
        return FIMD_IPTC;
    }
    private static final int FIMD_XMP = (int)7L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_XMP = 7
     * }
     */
    public static int FIMD_XMP() {
        return FIMD_XMP;
    }
    private static final int FIMD_GEOTIFF = (int)8L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_GEOTIFF = 8
     * }
     */
    public static int FIMD_GEOTIFF() {
        return FIMD_GEOTIFF;
    }
    private static final int FIMD_ANIMATION = (int)9L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_ANIMATION = 9
     * }
     */
    public static int FIMD_ANIMATION() {
        return FIMD_ANIMATION;
    }
    private static final int FIMD_CUSTOM = (int)10L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_CUSTOM = 10
     * }
     */
    public static int FIMD_CUSTOM() {
        return FIMD_CUSTOM;
    }
    private static final int FIMD_EXIF_RAW = (int)11L;
    /**
     * {@snippet lang=c :
     * enum FREE_IMAGE_MDMODEL.FIMD_EXIF_RAW = 11
     * }
     */
    public static int FIMD_EXIF_RAW() {
        return FIMD_EXIF_RAW;
    }
    /**
     * {@snippet lang=c :
     * typedef void *fi_handle
     * }
     */
    public static final AddressLayout fi_handle = Libfreeimage.C_POINTER;

    private static class FreeImage_Initialise {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Initialise");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_Initialise(BOOL load_local_plugins_only)
     * }
     */
    public static FunctionDescriptor FreeImage_Initialise$descriptor() {
        return FreeImage_Initialise.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_Initialise(BOOL load_local_plugins_only)
     * }
     */
    public static MethodHandle FreeImage_Initialise$handle() {
        return FreeImage_Initialise.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_Initialise(BOOL load_local_plugins_only)
     * }
     */
    public static MemorySegment FreeImage_Initialise$address() {
        return FreeImage_Initialise.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_Initialise(BOOL load_local_plugins_only)
     * }
     */
    public static void FreeImage_Initialise(int load_local_plugins_only) {
        var mh$ = FreeImage_Initialise.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Initialise", load_local_plugins_only);
            }
            mh$.invokeExact(load_local_plugins_only);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_DeInitialise {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_DeInitialise");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_DeInitialise()
     * }
     */
    public static FunctionDescriptor FreeImage_DeInitialise$descriptor() {
        return FreeImage_DeInitialise.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_DeInitialise()
     * }
     */
    public static MethodHandle FreeImage_DeInitialise$handle() {
        return FreeImage_DeInitialise.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_DeInitialise()
     * }
     */
    public static MemorySegment FreeImage_DeInitialise$address() {
        return FreeImage_DeInitialise.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_DeInitialise()
     * }
     */
    public static void FreeImage_DeInitialise() {
        var mh$ = FreeImage_DeInitialise.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_DeInitialise");
            }
            mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetVersion {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetVersion");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetVersion()
     * }
     */
    public static FunctionDescriptor FreeImage_GetVersion$descriptor() {
        return FreeImage_GetVersion.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetVersion()
     * }
     */
    public static MethodHandle FreeImage_GetVersion$handle() {
        return FreeImage_GetVersion.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetVersion()
     * }
     */
    public static MemorySegment FreeImage_GetVersion$address() {
        return FreeImage_GetVersion.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetVersion()
     * }
     */
    public static MemorySegment FreeImage_GetVersion() {
        var mh$ = FreeImage_GetVersion.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetVersion");
            }
            return (MemorySegment)mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetCopyrightMessage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetCopyrightMessage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetCopyrightMessage()
     * }
     */
    public static FunctionDescriptor FreeImage_GetCopyrightMessage$descriptor() {
        return FreeImage_GetCopyrightMessage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetCopyrightMessage()
     * }
     */
    public static MethodHandle FreeImage_GetCopyrightMessage$handle() {
        return FreeImage_GetCopyrightMessage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetCopyrightMessage()
     * }
     */
    public static MemorySegment FreeImage_GetCopyrightMessage$address() {
        return FreeImage_GetCopyrightMessage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetCopyrightMessage()
     * }
     */
    public static MemorySegment FreeImage_GetCopyrightMessage() {
        var mh$ = FreeImage_GetCopyrightMessage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetCopyrightMessage");
            }
            return (MemorySegment)mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetOutputMessageStdCall {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetOutputMessageStdCall");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf)
     * }
     */
    public static FunctionDescriptor FreeImage_SetOutputMessageStdCall$descriptor() {
        return FreeImage_SetOutputMessageStdCall.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf)
     * }
     */
    public static MethodHandle FreeImage_SetOutputMessageStdCall$handle() {
        return FreeImage_SetOutputMessageStdCall.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf)
     * }
     */
    public static MemorySegment FreeImage_SetOutputMessageStdCall$address() {
        return FreeImage_SetOutputMessageStdCall.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessageStdCall(FreeImage_OutputMessageFunctionStdCall omf)
     * }
     */
    public static void FreeImage_SetOutputMessageStdCall(MemorySegment omf) {
        var mh$ = FreeImage_SetOutputMessageStdCall.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetOutputMessageStdCall", omf);
            }
            mh$.invokeExact(omf);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetOutputMessage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetOutputMessage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf)
     * }
     */
    public static FunctionDescriptor FreeImage_SetOutputMessage$descriptor() {
        return FreeImage_SetOutputMessage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf)
     * }
     */
    public static MethodHandle FreeImage_SetOutputMessage$handle() {
        return FreeImage_SetOutputMessage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf)
     * }
     */
    public static MemorySegment FreeImage_SetOutputMessage$address() {
        return FreeImage_SetOutputMessage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf)
     * }
     */
    public static void FreeImage_SetOutputMessage(MemorySegment omf) {
        var mh$ = FreeImage_SetOutputMessage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetOutputMessage", omf);
            }
            mh$.invokeExact(omf);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    /**
     * Variadic invoker class for:
     * {@snippet lang=c :
     * void FreeImage_OutputMessageProc(int fif, const char *fmt, ...)
     * }
     */
    public static class FreeImage_OutputMessageProc {
        private static final FunctionDescriptor BASE_DESC = FunctionDescriptor.ofVoid(
                Libfreeimage.C_INT,
                Libfreeimage.C_POINTER
            );
        private static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_OutputMessageProc");

        private final MethodHandle handle;
        private final FunctionDescriptor descriptor;
        private final MethodHandle spreader;

        private FreeImage_OutputMessageProc(MethodHandle handle, FunctionDescriptor descriptor, MethodHandle spreader) {
            this.handle = handle;
            this.descriptor = descriptor;
            this.spreader = spreader;
        }

        /**
         * Variadic invoker factory for:
         * {@snippet lang=c :
         * void FreeImage_OutputMessageProc(int fif, const char *fmt, ...)
         * }
         */
        public static FreeImage_OutputMessageProc makeInvoker(MemoryLayout... layouts) {
            FunctionDescriptor desc$ = BASE_DESC.appendArgumentLayouts(layouts);
            Linker.Option fva$ = Linker.Option.firstVariadicArg(BASE_DESC.argumentLayouts().size());
            var mh$ = Linker.nativeLinker().downcallHandle(ADDR, desc$, fva$);
            var spreader$ = mh$.asSpreader(Object[].class, layouts.length);
            return new FreeImage_OutputMessageProc(mh$, desc$, spreader$);
        }

        /**
         * {@return the address}
         */
        public static MemorySegment address() {
            return ADDR;
        }

        /**
         * {@return the specialized method handle}
         */
        public MethodHandle handle() {
            return handle;
        }

        /**
         * {@return the specialized descriptor}
         */
        public FunctionDescriptor descriptor() {
            return descriptor;
        }

        public void apply(int fif, MemorySegment fmt, Object... x2) {
            try {
                if (TRACE_DOWNCALLS) {
                    traceDowncall("FreeImage_OutputMessageProc", fif, fmt, x2);
                }
                spreader.invokeExact(fif, fmt, x2);
            } catch(IllegalArgumentException | ClassCastException ex$)  {
                throw ex$; // rethrow IAE from passing wrong number/type of args
            } catch (Throwable ex$) {
               throw new AssertionError("should not reach here", ex$);
            }
        }
    }

    private static class FreeImage_Allocate {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Allocate");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Allocate(int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static FunctionDescriptor FreeImage_Allocate$descriptor() {
        return FreeImage_Allocate.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Allocate(int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MethodHandle FreeImage_Allocate$handle() {
        return FreeImage_Allocate.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Allocate(int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_Allocate$address() {
        return FreeImage_Allocate.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Allocate(int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_Allocate(int width, int height, int bpp, int red_mask, int green_mask, int blue_mask) {
        var mh$ = FreeImage_Allocate.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Allocate", width, height, bpp, red_mask, green_mask, blue_mask);
            }
            return (MemorySegment)mh$.invokeExact(width, height, bpp, red_mask, green_mask, blue_mask);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AllocateT {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AllocateT");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static FunctionDescriptor FreeImage_AllocateT$descriptor() {
        return FreeImage_AllocateT.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MethodHandle FreeImage_AllocateT$handle() {
        return FreeImage_AllocateT.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateT$address() {
        return FreeImage_AllocateT.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateT(int type, int width, int height, int bpp, int red_mask, int green_mask, int blue_mask) {
        var mh$ = FreeImage_AllocateT.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AllocateT", type, width, height, bpp, red_mask, green_mask, blue_mask);
            }
            return (MemorySegment)mh$.invokeExact(type, width, height, bpp, red_mask, green_mask, blue_mask);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Clone {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Clone");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Clone(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_Clone$descriptor() {
        return FreeImage_Clone.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Clone(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_Clone$handle() {
        return FreeImage_Clone.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Clone(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_Clone$address() {
        return FreeImage_Clone.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Clone(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_Clone(MemorySegment dib) {
        var mh$ = FreeImage_Clone.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Clone", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Unload {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Unload");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_Unload(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_Unload$descriptor() {
        return FreeImage_Unload.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_Unload(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_Unload$handle() {
        return FreeImage_Unload.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_Unload(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_Unload$address() {
        return FreeImage_Unload.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_Unload(FIBITMAP *dib)
     * }
     */
    public static void FreeImage_Unload(MemorySegment dib) {
        var mh$ = FreeImage_Unload.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Unload", dib);
            }
            mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_HasPixels {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_HasPixels");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasPixels(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_HasPixels$descriptor() {
        return FreeImage_HasPixels.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasPixels(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_HasPixels$handle() {
        return FreeImage_HasPixels.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasPixels(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_HasPixels$address() {
        return FreeImage_HasPixels.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_HasPixels(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_HasPixels(MemorySegment dib) {
        var mh$ = FreeImage_HasPixels.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_HasPixels", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Load {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Load");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_Load$descriptor() {
        return FreeImage_Load.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags)
     * }
     */
    public static MethodHandle FreeImage_Load$handle() {
        return FreeImage_Load.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_Load$address() {
        return FreeImage_Load.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_Load(int fif, MemorySegment filename, int flags) {
        var mh$ = FreeImage_Load.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Load", fif, filename, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, filename, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LoadU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LoadU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_LoadU$descriptor() {
        return FreeImage_LoadU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags)
     * }
     */
    public static MethodHandle FreeImage_LoadU$handle() {
        return FreeImage_LoadU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadU$address() {
        return FreeImage_LoadU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadU(FREE_IMAGE_FORMAT fif, const wchar_t *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadU(int fif, MemorySegment filename, int flags) {
        var mh$ = FreeImage_LoadU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LoadU", fif, filename, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, filename, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LoadFromHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LoadFromHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_LoadFromHandle$descriptor() {
        return FreeImage_LoadFromHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MethodHandle FreeImage_LoadFromHandle$handle() {
        return FreeImage_LoadFromHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadFromHandle$address() {
        return FreeImage_LoadFromHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadFromHandle(int fif, MemorySegment io, MemorySegment handle, int flags) {
        var mh$ = FreeImage_LoadFromHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LoadFromHandle", fif, io, handle, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, io, handle, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Save {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Save");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_Save$descriptor() {
        return FreeImage_Save.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags)
     * }
     */
    public static MethodHandle FreeImage_Save$handle() {
        return FreeImage_Save.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_Save$address() {
        return FreeImage_Save.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags)
     * }
     */
    public static int FreeImage_Save(int fif, MemorySegment dib, MemorySegment filename, int flags) {
        var mh$ = FreeImage_Save.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Save", fif, dib, filename, flags);
            }
            return (int)mh$.invokeExact(fif, dib, filename, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SaveU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SaveU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_SaveU$descriptor() {
        return FreeImage_SaveU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags)
     * }
     */
    public static MethodHandle FreeImage_SaveU$handle() {
        return FreeImage_SaveU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags)
     * }
     */
    public static MemorySegment FreeImage_SaveU$address() {
        return FreeImage_SaveU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SaveU(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const wchar_t *filename, int flags)
     * }
     */
    public static int FreeImage_SaveU(int fif, MemorySegment dib, MemorySegment filename, int flags) {
        var mh$ = FreeImage_SaveU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SaveU", fif, dib, filename, flags);
            }
            return (int)mh$.invokeExact(fif, dib, filename, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SaveToHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SaveToHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_SaveToHandle$descriptor() {
        return FreeImage_SaveToHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MethodHandle FreeImage_SaveToHandle$handle() {
        return FreeImage_SaveToHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_SaveToHandle$address() {
        return FreeImage_SaveToHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static int FreeImage_SaveToHandle(int fif, MemorySegment dib, MemorySegment io, MemorySegment handle, int flags) {
        var mh$ = FreeImage_SaveToHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SaveToHandle", fif, dib, io, handle, flags);
            }
            return (int)mh$.invokeExact(fif, dib, io, handle, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_OpenMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_OpenMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIMEMORY *FreeImage_OpenMemory(BYTE *data, DWORD size_in_bytes)
     * }
     */
    public static FunctionDescriptor FreeImage_OpenMemory$descriptor() {
        return FreeImage_OpenMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIMEMORY *FreeImage_OpenMemory(BYTE *data, DWORD size_in_bytes)
     * }
     */
    public static MethodHandle FreeImage_OpenMemory$handle() {
        return FreeImage_OpenMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIMEMORY *FreeImage_OpenMemory(BYTE *data, DWORD size_in_bytes)
     * }
     */
    public static MemorySegment FreeImage_OpenMemory$address() {
        return FreeImage_OpenMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIMEMORY *FreeImage_OpenMemory(BYTE *data, DWORD size_in_bytes)
     * }
     */
    public static MemorySegment FreeImage_OpenMemory(MemorySegment data, int size_in_bytes) {
        var mh$ = FreeImage_OpenMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_OpenMemory", data, size_in_bytes);
            }
            return (MemorySegment)mh$.invokeExact(data, size_in_bytes);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CloseMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CloseMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_CloseMemory(FIMEMORY *stream)
     * }
     */
    public static FunctionDescriptor FreeImage_CloseMemory$descriptor() {
        return FreeImage_CloseMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_CloseMemory(FIMEMORY *stream)
     * }
     */
    public static MethodHandle FreeImage_CloseMemory$handle() {
        return FreeImage_CloseMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_CloseMemory(FIMEMORY *stream)
     * }
     */
    public static MemorySegment FreeImage_CloseMemory$address() {
        return FreeImage_CloseMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_CloseMemory(FIMEMORY *stream)
     * }
     */
    public static void FreeImage_CloseMemory(MemorySegment stream) {
        var mh$ = FreeImage_CloseMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CloseMemory", stream);
            }
            mh$.invokeExact(stream);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LoadFromMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LoadFromMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_LoadFromMemory$descriptor() {
        return FreeImage_LoadFromMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MethodHandle FreeImage_LoadFromMemory$handle() {
        return FreeImage_LoadFromMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadFromMemory$address() {
        return FreeImage_LoadFromMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadFromMemory(int fif, MemorySegment stream, int flags) {
        var mh$ = FreeImage_LoadFromMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LoadFromMemory", fif, stream, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, stream, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SaveToMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SaveToMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_SaveToMemory$descriptor() {
        return FreeImage_SaveToMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags)
     * }
     */
    public static MethodHandle FreeImage_SaveToMemory$handle() {
        return FreeImage_SaveToMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_SaveToMemory$address() {
        return FreeImage_SaveToMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags)
     * }
     */
    public static int FreeImage_SaveToMemory(int fif, MemorySegment dib, MemorySegment stream, int flags) {
        var mh$ = FreeImage_SaveToMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SaveToMemory", fif, dib, stream, flags);
            }
            return (int)mh$.invokeExact(fif, dib, stream, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TellMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_LONG,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TellMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * long FreeImage_TellMemory(FIMEMORY *stream)
     * }
     */
    public static FunctionDescriptor FreeImage_TellMemory$descriptor() {
        return FreeImage_TellMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * long FreeImage_TellMemory(FIMEMORY *stream)
     * }
     */
    public static MethodHandle FreeImage_TellMemory$handle() {
        return FreeImage_TellMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * long FreeImage_TellMemory(FIMEMORY *stream)
     * }
     */
    public static MemorySegment FreeImage_TellMemory$address() {
        return FreeImage_TellMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * long FreeImage_TellMemory(FIMEMORY *stream)
     * }
     */
    public static long FreeImage_TellMemory(MemorySegment stream) {
        var mh$ = FreeImage_TellMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TellMemory", stream);
            }
            return (long)mh$.invokeExact(stream);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SeekMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_LONG,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SeekMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin)
     * }
     */
    public static FunctionDescriptor FreeImage_SeekMemory$descriptor() {
        return FreeImage_SeekMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin)
     * }
     */
    public static MethodHandle FreeImage_SeekMemory$handle() {
        return FreeImage_SeekMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin)
     * }
     */
    public static MemorySegment FreeImage_SeekMemory$address() {
        return FreeImage_SeekMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin)
     * }
     */
    public static int FreeImage_SeekMemory(MemorySegment stream, long offset, int origin) {
        var mh$ = FreeImage_SeekMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SeekMemory", stream, offset, origin);
            }
            return (int)mh$.invokeExact(stream, offset, origin);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AcquireMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AcquireMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes)
     * }
     */
    public static FunctionDescriptor FreeImage_AcquireMemory$descriptor() {
        return FreeImage_AcquireMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes)
     * }
     */
    public static MethodHandle FreeImage_AcquireMemory$handle() {
        return FreeImage_AcquireMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes)
     * }
     */
    public static MemorySegment FreeImage_AcquireMemory$address() {
        return FreeImage_AcquireMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes)
     * }
     */
    public static int FreeImage_AcquireMemory(MemorySegment stream, MemorySegment data, MemorySegment size_in_bytes) {
        var mh$ = FreeImage_AcquireMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AcquireMemory", stream, data, size_in_bytes);
            }
            return (int)mh$.invokeExact(stream, data, size_in_bytes);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ReadMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ReadMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ReadMemory(void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static FunctionDescriptor FreeImage_ReadMemory$descriptor() {
        return FreeImage_ReadMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ReadMemory(void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static MethodHandle FreeImage_ReadMemory$handle() {
        return FreeImage_ReadMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ReadMemory(void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static MemorySegment FreeImage_ReadMemory$address() {
        return FreeImage_ReadMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_ReadMemory(void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static int FreeImage_ReadMemory(MemorySegment buffer, int size, int count, MemorySegment stream) {
        var mh$ = FreeImage_ReadMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ReadMemory", buffer, size, count, stream);
            }
            return (int)mh$.invokeExact(buffer, size, count, stream);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_WriteMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_WriteMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_WriteMemory(const void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static FunctionDescriptor FreeImage_WriteMemory$descriptor() {
        return FreeImage_WriteMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_WriteMemory(const void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static MethodHandle FreeImage_WriteMemory$handle() {
        return FreeImage_WriteMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_WriteMemory(const void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static MemorySegment FreeImage_WriteMemory$address() {
        return FreeImage_WriteMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_WriteMemory(const void *buffer, unsigned int size, unsigned int count, FIMEMORY *stream)
     * }
     */
    public static int FreeImage_WriteMemory(MemorySegment buffer, int size, int count, MemorySegment stream) {
        var mh$ = FreeImage_WriteMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_WriteMemory", buffer, size, count, stream);
            }
            return (int)mh$.invokeExact(buffer, size, count, stream);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LoadMultiBitmapFromMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LoadMultiBitmapFromMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_LoadMultiBitmapFromMemory$descriptor() {
        return FreeImage_LoadMultiBitmapFromMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MethodHandle FreeImage_LoadMultiBitmapFromMemory$handle() {
        return FreeImage_LoadMultiBitmapFromMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadMultiBitmapFromMemory$address() {
        return FreeImage_LoadMultiBitmapFromMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_LoadMultiBitmapFromMemory(int fif, MemorySegment stream, int flags) {
        var mh$ = FreeImage_LoadMultiBitmapFromMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LoadMultiBitmapFromMemory", fif, stream, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, stream, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SaveMultiBitmapToMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SaveMultiBitmapToMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_SaveMultiBitmapToMemory$descriptor() {
        return FreeImage_SaveMultiBitmapToMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags)
     * }
     */
    public static MethodHandle FreeImage_SaveMultiBitmapToMemory$handle() {
        return FreeImage_SaveMultiBitmapToMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags)
     * }
     */
    public static MemorySegment FreeImage_SaveMultiBitmapToMemory$address() {
        return FreeImage_SaveMultiBitmapToMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags)
     * }
     */
    public static int FreeImage_SaveMultiBitmapToMemory(int fif, MemorySegment bitmap, MemorySegment stream, int flags) {
        var mh$ = FreeImage_SaveMultiBitmapToMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SaveMultiBitmapToMemory", fif, bitmap, stream, flags);
            }
            return (int)mh$.invokeExact(fif, bitmap, stream, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_RegisterLocalPlugin {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_RegisterLocalPlugin");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static FunctionDescriptor FreeImage_RegisterLocalPlugin$descriptor() {
        return FreeImage_RegisterLocalPlugin.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static MethodHandle FreeImage_RegisterLocalPlugin$handle() {
        return FreeImage_RegisterLocalPlugin.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static MemorySegment FreeImage_RegisterLocalPlugin$address() {
        return FreeImage_RegisterLocalPlugin.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static int FreeImage_RegisterLocalPlugin(MemorySegment proc_address, MemorySegment format, MemorySegment description, MemorySegment extension, MemorySegment regexpr) {
        var mh$ = FreeImage_RegisterLocalPlugin.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_RegisterLocalPlugin", proc_address, format, description, extension, regexpr);
            }
            return (int)mh$.invokeExact(proc_address, format, description, extension, regexpr);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_RegisterExternalPlugin {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_RegisterExternalPlugin");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterExternalPlugin(const char *path, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static FunctionDescriptor FreeImage_RegisterExternalPlugin$descriptor() {
        return FreeImage_RegisterExternalPlugin.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterExternalPlugin(const char *path, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static MethodHandle FreeImage_RegisterExternalPlugin$handle() {
        return FreeImage_RegisterExternalPlugin.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterExternalPlugin(const char *path, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static MemorySegment FreeImage_RegisterExternalPlugin$address() {
        return FreeImage_RegisterExternalPlugin.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_RegisterExternalPlugin(const char *path, const char *format, const char *description, const char *extension, const char *regexpr)
     * }
     */
    public static int FreeImage_RegisterExternalPlugin(MemorySegment path, MemorySegment format, MemorySegment description, MemorySegment extension, MemorySegment regexpr) {
        var mh$ = FreeImage_RegisterExternalPlugin.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_RegisterExternalPlugin", path, format, description, extension, regexpr);
            }
            return (int)mh$.invokeExact(path, format, description, extension, regexpr);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_GetFIFCount()
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFCount$descriptor() {
        return FreeImage_GetFIFCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_GetFIFCount()
     * }
     */
    public static MethodHandle FreeImage_GetFIFCount$handle() {
        return FreeImage_GetFIFCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_GetFIFCount()
     * }
     */
    public static MemorySegment FreeImage_GetFIFCount$address() {
        return FreeImage_GetFIFCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_GetFIFCount()
     * }
     */
    public static int FreeImage_GetFIFCount() {
        var mh$ = FreeImage_GetFIFCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFCount");
            }
            return (int)mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetPluginEnabled {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetPluginEnabled");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable)
     * }
     */
    public static FunctionDescriptor FreeImage_SetPluginEnabled$descriptor() {
        return FreeImage_SetPluginEnabled.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable)
     * }
     */
    public static MethodHandle FreeImage_SetPluginEnabled$handle() {
        return FreeImage_SetPluginEnabled.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable)
     * }
     */
    public static MemorySegment FreeImage_SetPluginEnabled$address() {
        return FreeImage_SetPluginEnabled.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable)
     * }
     */
    public static int FreeImage_SetPluginEnabled(int fif, int enable) {
        var mh$ = FreeImage_SetPluginEnabled.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetPluginEnabled", fif, enable);
            }
            return (int)mh$.invokeExact(fif, enable);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_IsPluginEnabled {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_IsPluginEnabled");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_IsPluginEnabled$descriptor() {
        return FreeImage_IsPluginEnabled.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_IsPluginEnabled$handle() {
        return FreeImage_IsPluginEnabled.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_IsPluginEnabled$address() {
        return FreeImage_IsPluginEnabled.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static int FreeImage_IsPluginEnabled(int fif) {
        var mh$ = FreeImage_IsPluginEnabled.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_IsPluginEnabled", fif);
            }
            return (int)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFFromFormat {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFFromFormat");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFormat(const char *format)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFFromFormat$descriptor() {
        return FreeImage_GetFIFFromFormat.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFormat(const char *format)
     * }
     */
    public static MethodHandle FreeImage_GetFIFFromFormat$handle() {
        return FreeImage_GetFIFFromFormat.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFormat(const char *format)
     * }
     */
    public static MemorySegment FreeImage_GetFIFFromFormat$address() {
        return FreeImage_GetFIFFromFormat.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFormat(const char *format)
     * }
     */
    public static int FreeImage_GetFIFFromFormat(MemorySegment format) {
        var mh$ = FreeImage_GetFIFFromFormat.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFFromFormat", format);
            }
            return (int)mh$.invokeExact(format);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFFromMime {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFFromMime");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromMime(const char *mime)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFFromMime$descriptor() {
        return FreeImage_GetFIFFromMime.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromMime(const char *mime)
     * }
     */
    public static MethodHandle FreeImage_GetFIFFromMime$handle() {
        return FreeImage_GetFIFFromMime.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromMime(const char *mime)
     * }
     */
    public static MemorySegment FreeImage_GetFIFFromMime$address() {
        return FreeImage_GetFIFFromMime.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromMime(const char *mime)
     * }
     */
    public static int FreeImage_GetFIFFromMime(MemorySegment mime) {
        var mh$ = FreeImage_GetFIFFromMime.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFFromMime", mime);
            }
            return (int)mh$.invokeExact(mime);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFormatFromFIF {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFormatFromFIF");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFormatFromFIF$descriptor() {
        return FreeImage_GetFormatFromFIF.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_GetFormatFromFIF$handle() {
        return FreeImage_GetFormatFromFIF.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFormatFromFIF$address() {
        return FreeImage_GetFormatFromFIF.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFormatFromFIF(int fif) {
        var mh$ = FreeImage_GetFormatFromFIF.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFormatFromFIF", fif);
            }
            return (MemorySegment)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFExtensionList {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFExtensionList");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFExtensionList$descriptor() {
        return FreeImage_GetFIFExtensionList.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_GetFIFExtensionList$handle() {
        return FreeImage_GetFIFExtensionList.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFExtensionList$address() {
        return FreeImage_GetFIFExtensionList.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFExtensionList(int fif) {
        var mh$ = FreeImage_GetFIFExtensionList.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFExtensionList", fif);
            }
            return (MemorySegment)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFDescription {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFDescription");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFDescription$descriptor() {
        return FreeImage_GetFIFDescription.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_GetFIFDescription$handle() {
        return FreeImage_GetFIFDescription.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFDescription$address() {
        return FreeImage_GetFIFDescription.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFDescription(int fif) {
        var mh$ = FreeImage_GetFIFDescription.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFDescription", fif);
            }
            return (MemorySegment)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFRegExpr {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFRegExpr");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFRegExpr$descriptor() {
        return FreeImage_GetFIFRegExpr.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_GetFIFRegExpr$handle() {
        return FreeImage_GetFIFRegExpr.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFRegExpr$address() {
        return FreeImage_GetFIFRegExpr.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFRegExpr(int fif) {
        var mh$ = FreeImage_GetFIFRegExpr.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFRegExpr", fif);
            }
            return (MemorySegment)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFMimeType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFMimeType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFMimeType$descriptor() {
        return FreeImage_GetFIFMimeType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_GetFIFMimeType$handle() {
        return FreeImage_GetFIFMimeType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFMimeType$address() {
        return FreeImage_GetFIFMimeType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_GetFIFMimeType(int fif) {
        var mh$ = FreeImage_GetFIFMimeType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFMimeType", fif);
            }
            return (MemorySegment)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFFromFilename {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFFromFilename");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilename(const char *filename)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFFromFilename$descriptor() {
        return FreeImage_GetFIFFromFilename.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilename(const char *filename)
     * }
     */
    public static MethodHandle FreeImage_GetFIFFromFilename$handle() {
        return FreeImage_GetFIFFromFilename.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilename(const char *filename)
     * }
     */
    public static MemorySegment FreeImage_GetFIFFromFilename$address() {
        return FreeImage_GetFIFFromFilename.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilename(const char *filename)
     * }
     */
    public static int FreeImage_GetFIFFromFilename(MemorySegment filename) {
        var mh$ = FreeImage_GetFIFFromFilename.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFFromFilename", filename);
            }
            return (int)mh$.invokeExact(filename);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFIFFromFilenameU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFIFFromFilenameU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilenameU(const wchar_t *filename)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFIFFromFilenameU$descriptor() {
        return FreeImage_GetFIFFromFilenameU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilenameU(const wchar_t *filename)
     * }
     */
    public static MethodHandle FreeImage_GetFIFFromFilenameU$handle() {
        return FreeImage_GetFIFFromFilenameU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilenameU(const wchar_t *filename)
     * }
     */
    public static MemorySegment FreeImage_GetFIFFromFilenameU$address() {
        return FreeImage_GetFIFFromFilenameU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFIFFromFilenameU(const wchar_t *filename)
     * }
     */
    public static int FreeImage_GetFIFFromFilenameU(MemorySegment filename) {
        var mh$ = FreeImage_GetFIFFromFilenameU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFIFFromFilenameU", filename);
            }
            return (int)mh$.invokeExact(filename);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsReading {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsReading");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsReading$descriptor() {
        return FreeImage_FIFSupportsReading.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsReading$handle() {
        return FreeImage_FIFSupportsReading.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsReading$address() {
        return FreeImage_FIFSupportsReading.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static int FreeImage_FIFSupportsReading(int fif) {
        var mh$ = FreeImage_FIFSupportsReading.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsReading", fif);
            }
            return (int)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsWriting {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsWriting");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsWriting$descriptor() {
        return FreeImage_FIFSupportsWriting.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsWriting$handle() {
        return FreeImage_FIFSupportsWriting.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsWriting$address() {
        return FreeImage_FIFSupportsWriting.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static int FreeImage_FIFSupportsWriting(int fif) {
        var mh$ = FreeImage_FIFSupportsWriting.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsWriting", fif);
            }
            return (int)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsExportBPP {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsExportBPP");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsExportBPP$descriptor() {
        return FreeImage_FIFSupportsExportBPP.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsExportBPP$handle() {
        return FreeImage_FIFSupportsExportBPP.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsExportBPP$address() {
        return FreeImage_FIFSupportsExportBPP.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp)
     * }
     */
    public static int FreeImage_FIFSupportsExportBPP(int fif, int bpp) {
        var mh$ = FreeImage_FIFSupportsExportBPP.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsExportBPP", fif, bpp);
            }
            return (int)mh$.invokeExact(fif, bpp);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsExportType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsExportType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsExportType$descriptor() {
        return FreeImage_FIFSupportsExportType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsExportType$handle() {
        return FreeImage_FIFSupportsExportType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsExportType$address() {
        return FreeImage_FIFSupportsExportType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type)
     * }
     */
    public static int FreeImage_FIFSupportsExportType(int fif, int type) {
        var mh$ = FreeImage_FIFSupportsExportType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsExportType", fif, type);
            }
            return (int)mh$.invokeExact(fif, type);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsICCProfiles {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsICCProfiles");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsICCProfiles$descriptor() {
        return FreeImage_FIFSupportsICCProfiles.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsICCProfiles$handle() {
        return FreeImage_FIFSupportsICCProfiles.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsICCProfiles$address() {
        return FreeImage_FIFSupportsICCProfiles.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static int FreeImage_FIFSupportsICCProfiles(int fif) {
        var mh$ = FreeImage_FIFSupportsICCProfiles.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsICCProfiles", fif);
            }
            return (int)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FIFSupportsNoPixels {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FIFSupportsNoPixels");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static FunctionDescriptor FreeImage_FIFSupportsNoPixels$descriptor() {
        return FreeImage_FIFSupportsNoPixels.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MethodHandle FreeImage_FIFSupportsNoPixels$handle() {
        return FreeImage_FIFSupportsNoPixels.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static MemorySegment FreeImage_FIFSupportsNoPixels$address() {
        return FreeImage_FIFSupportsNoPixels.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FIFSupportsNoPixels(FREE_IMAGE_FORMAT fif)
     * }
     */
    public static int FreeImage_FIFSupportsNoPixels(int fif) {
        var mh$ = FreeImage_FIFSupportsNoPixels.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FIFSupportsNoPixels", fif);
            }
            return (int)mh$.invokeExact(fif);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_OpenMultiBitmap {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_OpenMultiBitmap");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_OpenMultiBitmap$descriptor() {
        return FreeImage_OpenMultiBitmap.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory, int flags)
     * }
     */
    public static MethodHandle FreeImage_OpenMultiBitmap$handle() {
        return FreeImage_OpenMultiBitmap.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory, int flags)
     * }
     */
    public static MemorySegment FreeImage_OpenMultiBitmap$address() {
        return FreeImage_OpenMultiBitmap.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory, int flags)
     * }
     */
    public static MemorySegment FreeImage_OpenMultiBitmap(int fif, MemorySegment filename, int create_new, int read_only, int keep_cache_in_memory, int flags) {
        var mh$ = FreeImage_OpenMultiBitmap.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_OpenMultiBitmap", fif, filename, create_new, read_only, keep_cache_in_memory, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, filename, create_new, read_only, keep_cache_in_memory, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_OpenMultiBitmapFromHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_OpenMultiBitmapFromHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_OpenMultiBitmapFromHandle$descriptor() {
        return FreeImage_OpenMultiBitmapFromHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MethodHandle FreeImage_OpenMultiBitmapFromHandle$handle() {
        return FreeImage_OpenMultiBitmapFromHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_OpenMultiBitmapFromHandle$address() {
        return FreeImage_OpenMultiBitmapFromHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIMULTIBITMAP *FreeImage_OpenMultiBitmapFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_OpenMultiBitmapFromHandle(int fif, MemorySegment io, MemorySegment handle, int flags) {
        var mh$ = FreeImage_OpenMultiBitmapFromHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_OpenMultiBitmapFromHandle", fif, io, handle, flags);
            }
            return (MemorySegment)mh$.invokeExact(fif, io, handle, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SaveMultiBitmapToHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SaveMultiBitmapToHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_SaveMultiBitmapToHandle$descriptor() {
        return FreeImage_SaveMultiBitmapToHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MethodHandle FreeImage_SaveMultiBitmapToHandle$handle() {
        return FreeImage_SaveMultiBitmapToHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static MemorySegment FreeImage_SaveMultiBitmapToHandle$address() {
        return FreeImage_SaveMultiBitmapToHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SaveMultiBitmapToHandle(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FreeImageIO *io, fi_handle handle, int flags)
     * }
     */
    public static int FreeImage_SaveMultiBitmapToHandle(int fif, MemorySegment bitmap, MemorySegment io, MemorySegment handle, int flags) {
        var mh$ = FreeImage_SaveMultiBitmapToHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SaveMultiBitmapToHandle", fif, bitmap, io, handle, flags);
            }
            return (int)mh$.invokeExact(fif, bitmap, io, handle, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CloseMultiBitmap {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CloseMultiBitmap");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_CloseMultiBitmap$descriptor() {
        return FreeImage_CloseMultiBitmap.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags)
     * }
     */
    public static MethodHandle FreeImage_CloseMultiBitmap$handle() {
        return FreeImage_CloseMultiBitmap.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags)
     * }
     */
    public static MemorySegment FreeImage_CloseMultiBitmap$address() {
        return FreeImage_CloseMultiBitmap.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags)
     * }
     */
    public static int FreeImage_CloseMultiBitmap(MemorySegment bitmap, int flags) {
        var mh$ = FreeImage_CloseMultiBitmap.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CloseMultiBitmap", bitmap, flags);
            }
            return (int)mh$.invokeExact(bitmap, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetPageCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetPageCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_GetPageCount(FIMULTIBITMAP *bitmap)
     * }
     */
    public static FunctionDescriptor FreeImage_GetPageCount$descriptor() {
        return FreeImage_GetPageCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_GetPageCount(FIMULTIBITMAP *bitmap)
     * }
     */
    public static MethodHandle FreeImage_GetPageCount$handle() {
        return FreeImage_GetPageCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_GetPageCount(FIMULTIBITMAP *bitmap)
     * }
     */
    public static MemorySegment FreeImage_GetPageCount$address() {
        return FreeImage_GetPageCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_GetPageCount(FIMULTIBITMAP *bitmap)
     * }
     */
    public static int FreeImage_GetPageCount(MemorySegment bitmap) {
        var mh$ = FreeImage_GetPageCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetPageCount", bitmap);
            }
            return (int)mh$.invokeExact(bitmap);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AppendPage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AppendPage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data)
     * }
     */
    public static FunctionDescriptor FreeImage_AppendPage$descriptor() {
        return FreeImage_AppendPage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data)
     * }
     */
    public static MethodHandle FreeImage_AppendPage$handle() {
        return FreeImage_AppendPage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data)
     * }
     */
    public static MemorySegment FreeImage_AppendPage$address() {
        return FreeImage_AppendPage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data)
     * }
     */
    public static void FreeImage_AppendPage(MemorySegment bitmap, MemorySegment data) {
        var mh$ = FreeImage_AppendPage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AppendPage", bitmap, data);
            }
            mh$.invokeExact(bitmap, data);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_InsertPage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_InsertPage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data)
     * }
     */
    public static FunctionDescriptor FreeImage_InsertPage$descriptor() {
        return FreeImage_InsertPage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data)
     * }
     */
    public static MethodHandle FreeImage_InsertPage$handle() {
        return FreeImage_InsertPage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data)
     * }
     */
    public static MemorySegment FreeImage_InsertPage$address() {
        return FreeImage_InsertPage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data)
     * }
     */
    public static void FreeImage_InsertPage(MemorySegment bitmap, int page, MemorySegment data) {
        var mh$ = FreeImage_InsertPage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_InsertPage", bitmap, page, data);
            }
            mh$.invokeExact(bitmap, page, data);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_DeletePage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_DeletePage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static FunctionDescriptor FreeImage_DeletePage$descriptor() {
        return FreeImage_DeletePage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static MethodHandle FreeImage_DeletePage$handle() {
        return FreeImage_DeletePage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static MemorySegment FreeImage_DeletePage$address() {
        return FreeImage_DeletePage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static void FreeImage_DeletePage(MemorySegment bitmap, int page) {
        var mh$ = FreeImage_DeletePage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_DeletePage", bitmap, page);
            }
            mh$.invokeExact(bitmap, page);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LockPage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LockPage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static FunctionDescriptor FreeImage_LockPage$descriptor() {
        return FreeImage_LockPage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static MethodHandle FreeImage_LockPage$handle() {
        return FreeImage_LockPage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static MemorySegment FreeImage_LockPage$address() {
        return FreeImage_LockPage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page)
     * }
     */
    public static MemorySegment FreeImage_LockPage(MemorySegment bitmap, int page) {
        var mh$ = FreeImage_LockPage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LockPage", bitmap, page);
            }
            return (MemorySegment)mh$.invokeExact(bitmap, page);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_UnlockPage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_UnlockPage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed)
     * }
     */
    public static FunctionDescriptor FreeImage_UnlockPage$descriptor() {
        return FreeImage_UnlockPage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed)
     * }
     */
    public static MethodHandle FreeImage_UnlockPage$handle() {
        return FreeImage_UnlockPage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed)
     * }
     */
    public static MemorySegment FreeImage_UnlockPage$address() {
        return FreeImage_UnlockPage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *data, BOOL changed)
     * }
     */
    public static void FreeImage_UnlockPage(MemorySegment bitmap, MemorySegment data, int changed) {
        var mh$ = FreeImage_UnlockPage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_UnlockPage", bitmap, data, changed);
            }
            mh$.invokeExact(bitmap, data, changed);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_MovePage {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_MovePage");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source)
     * }
     */
    public static FunctionDescriptor FreeImage_MovePage$descriptor() {
        return FreeImage_MovePage.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source)
     * }
     */
    public static MethodHandle FreeImage_MovePage$handle() {
        return FreeImage_MovePage.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source)
     * }
     */
    public static MemorySegment FreeImage_MovePage$address() {
        return FreeImage_MovePage.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source)
     * }
     */
    public static int FreeImage_MovePage(MemorySegment bitmap, int target, int source) {
        var mh$ = FreeImage_MovePage.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_MovePage", bitmap, target, source);
            }
            return (int)mh$.invokeExact(bitmap, target, source);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetLockedPageNumbers {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetLockedPageNumbers");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count)
     * }
     */
    public static FunctionDescriptor FreeImage_GetLockedPageNumbers$descriptor() {
        return FreeImage_GetLockedPageNumbers.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count)
     * }
     */
    public static MethodHandle FreeImage_GetLockedPageNumbers$handle() {
        return FreeImage_GetLockedPageNumbers.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count)
     * }
     */
    public static MemorySegment FreeImage_GetLockedPageNumbers$address() {
        return FreeImage_GetLockedPageNumbers.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count)
     * }
     */
    public static int FreeImage_GetLockedPageNumbers(MemorySegment bitmap, MemorySegment pages, MemorySegment count) {
        var mh$ = FreeImage_GetLockedPageNumbers.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetLockedPageNumbers", bitmap, pages, count);
            }
            return (int)mh$.invokeExact(bitmap, pages, count);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFileType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFileType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileType(const char *filename, int size)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFileType$descriptor() {
        return FreeImage_GetFileType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileType(const char *filename, int size)
     * }
     */
    public static MethodHandle FreeImage_GetFileType$handle() {
        return FreeImage_GetFileType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileType(const char *filename, int size)
     * }
     */
    public static MemorySegment FreeImage_GetFileType$address() {
        return FreeImage_GetFileType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileType(const char *filename, int size)
     * }
     */
    public static int FreeImage_GetFileType(MemorySegment filename, int size) {
        var mh$ = FreeImage_GetFileType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFileType", filename, size);
            }
            return (int)mh$.invokeExact(filename, size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFileTypeU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFileTypeU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeU(const wchar_t *filename, int size)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFileTypeU$descriptor() {
        return FreeImage_GetFileTypeU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeU(const wchar_t *filename, int size)
     * }
     */
    public static MethodHandle FreeImage_GetFileTypeU$handle() {
        return FreeImage_GetFileTypeU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeU(const wchar_t *filename, int size)
     * }
     */
    public static MemorySegment FreeImage_GetFileTypeU$address() {
        return FreeImage_GetFileTypeU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeU(const wchar_t *filename, int size)
     * }
     */
    public static int FreeImage_GetFileTypeU(MemorySegment filename, int size) {
        var mh$ = FreeImage_GetFileTypeU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFileTypeU", filename, size);
            }
            return (int)mh$.invokeExact(filename, size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFileTypeFromHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFileTypeFromHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFileTypeFromHandle$descriptor() {
        return FreeImage_GetFileTypeFromHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size)
     * }
     */
    public static MethodHandle FreeImage_GetFileTypeFromHandle$handle() {
        return FreeImage_GetFileTypeFromHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size)
     * }
     */
    public static MemorySegment FreeImage_GetFileTypeFromHandle$address() {
        return FreeImage_GetFileTypeFromHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size)
     * }
     */
    public static int FreeImage_GetFileTypeFromHandle(MemorySegment io, MemorySegment handle, int size) {
        var mh$ = FreeImage_GetFileTypeFromHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFileTypeFromHandle", io, handle, size);
            }
            return (int)mh$.invokeExact(io, handle, size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetFileTypeFromMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetFileTypeFromMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size)
     * }
     */
    public static FunctionDescriptor FreeImage_GetFileTypeFromMemory$descriptor() {
        return FreeImage_GetFileTypeFromMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size)
     * }
     */
    public static MethodHandle FreeImage_GetFileTypeFromMemory$handle() {
        return FreeImage_GetFileTypeFromMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size)
     * }
     */
    public static MemorySegment FreeImage_GetFileTypeFromMemory$address() {
        return FreeImage_GetFileTypeFromMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_FORMAT FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size)
     * }
     */
    public static int FreeImage_GetFileTypeFromMemory(MemorySegment stream, int size) {
        var mh$ = FreeImage_GetFileTypeFromMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetFileTypeFromMemory", stream, size);
            }
            return (int)mh$.invokeExact(stream, size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Validate {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Validate");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename)
     * }
     */
    public static FunctionDescriptor FreeImage_Validate$descriptor() {
        return FreeImage_Validate.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename)
     * }
     */
    public static MethodHandle FreeImage_Validate$handle() {
        return FreeImage_Validate.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename)
     * }
     */
    public static MemorySegment FreeImage_Validate$address() {
        return FreeImage_Validate.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_Validate(FREE_IMAGE_FORMAT fif, const char *filename)
     * }
     */
    public static int FreeImage_Validate(int fif, MemorySegment filename) {
        var mh$ = FreeImage_Validate.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Validate", fif, filename);
            }
            return (int)mh$.invokeExact(fif, filename);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ValidateU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ValidateU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename)
     * }
     */
    public static FunctionDescriptor FreeImage_ValidateU$descriptor() {
        return FreeImage_ValidateU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename)
     * }
     */
    public static MethodHandle FreeImage_ValidateU$handle() {
        return FreeImage_ValidateU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename)
     * }
     */
    public static MemorySegment FreeImage_ValidateU$address() {
        return FreeImage_ValidateU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateU(FREE_IMAGE_FORMAT fif, const wchar_t *filename)
     * }
     */
    public static int FreeImage_ValidateU(int fif, MemorySegment filename) {
        var mh$ = FreeImage_ValidateU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ValidateU", fif, filename);
            }
            return (int)mh$.invokeExact(fif, filename);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ValidateFromHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ValidateFromHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle)
     * }
     */
    public static FunctionDescriptor FreeImage_ValidateFromHandle$descriptor() {
        return FreeImage_ValidateFromHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle)
     * }
     */
    public static MethodHandle FreeImage_ValidateFromHandle$handle() {
        return FreeImage_ValidateFromHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle)
     * }
     */
    public static MemorySegment FreeImage_ValidateFromHandle$address() {
        return FreeImage_ValidateFromHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle)
     * }
     */
    public static int FreeImage_ValidateFromHandle(int fif, MemorySegment io, MemorySegment handle) {
        var mh$ = FreeImage_ValidateFromHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ValidateFromHandle", fif, io, handle);
            }
            return (int)mh$.invokeExact(fif, io, handle);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ValidateFromMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ValidateFromMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream)
     * }
     */
    public static FunctionDescriptor FreeImage_ValidateFromMemory$descriptor() {
        return FreeImage_ValidateFromMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream)
     * }
     */
    public static MethodHandle FreeImage_ValidateFromMemory$handle() {
        return FreeImage_ValidateFromMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream)
     * }
     */
    public static MemorySegment FreeImage_ValidateFromMemory$address() {
        return FreeImage_ValidateFromMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_ValidateFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream)
     * }
     */
    public static int FreeImage_ValidateFromMemory(int fif, MemorySegment stream) {
        var mh$ = FreeImage_ValidateFromMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ValidateFromMemory", fif, stream);
            }
            return (int)mh$.invokeExact(fif, stream);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetImageType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetImageType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_TYPE FreeImage_GetImageType(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetImageType$descriptor() {
        return FreeImage_GetImageType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_TYPE FreeImage_GetImageType(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetImageType$handle() {
        return FreeImage_GetImageType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_TYPE FreeImage_GetImageType(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetImageType$address() {
        return FreeImage_GetImageType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_TYPE FreeImage_GetImageType(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetImageType(MemorySegment dib) {
        var mh$ = FreeImage_GetImageType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetImageType", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_IsLittleEndian {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_IsLittleEndian");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsLittleEndian()
     * }
     */
    public static FunctionDescriptor FreeImage_IsLittleEndian$descriptor() {
        return FreeImage_IsLittleEndian.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsLittleEndian()
     * }
     */
    public static MethodHandle FreeImage_IsLittleEndian$handle() {
        return FreeImage_IsLittleEndian.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsLittleEndian()
     * }
     */
    public static MemorySegment FreeImage_IsLittleEndian$address() {
        return FreeImage_IsLittleEndian.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_IsLittleEndian()
     * }
     */
    public static int FreeImage_IsLittleEndian() {
        var mh$ = FreeImage_IsLittleEndian.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_IsLittleEndian");
            }
            return (int)mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LookupX11Color {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LookupX11Color");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static FunctionDescriptor FreeImage_LookupX11Color$descriptor() {
        return FreeImage_LookupX11Color.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static MethodHandle FreeImage_LookupX11Color$handle() {
        return FreeImage_LookupX11Color.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static MemorySegment FreeImage_LookupX11Color$address() {
        return FreeImage_LookupX11Color.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static int FreeImage_LookupX11Color(MemorySegment szColor, MemorySegment nRed, MemorySegment nGreen, MemorySegment nBlue) {
        var mh$ = FreeImage_LookupX11Color.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LookupX11Color", szColor, nRed, nGreen, nBlue);
            }
            return (int)mh$.invokeExact(szColor, nRed, nGreen, nBlue);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_LookupSVGColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_LookupSVGColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static FunctionDescriptor FreeImage_LookupSVGColor$descriptor() {
        return FreeImage_LookupSVGColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static MethodHandle FreeImage_LookupSVGColor$handle() {
        return FreeImage_LookupSVGColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static MemorySegment FreeImage_LookupSVGColor$address() {
        return FreeImage_LookupSVGColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue)
     * }
     */
    public static int FreeImage_LookupSVGColor(MemorySegment szColor, MemorySegment nRed, MemorySegment nGreen, MemorySegment nBlue) {
        var mh$ = FreeImage_LookupSVGColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_LookupSVGColor", szColor, nRed, nGreen, nBlue);
            }
            return (int)mh$.invokeExact(szColor, nRed, nGreen, nBlue);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetBits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetBits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetBits(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetBits$descriptor() {
        return FreeImage_GetBits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetBits(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetBits$handle() {
        return FreeImage_GetBits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetBits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetBits$address() {
        return FreeImage_GetBits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BYTE *FreeImage_GetBits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetBits(MemorySegment dib) {
        var mh$ = FreeImage_GetBits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetBits", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetScanLine {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetScanLine");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetScanLine(FIBITMAP *dib, int scanline)
     * }
     */
    public static FunctionDescriptor FreeImage_GetScanLine$descriptor() {
        return FreeImage_GetScanLine.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetScanLine(FIBITMAP *dib, int scanline)
     * }
     */
    public static MethodHandle FreeImage_GetScanLine$handle() {
        return FreeImage_GetScanLine.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetScanLine(FIBITMAP *dib, int scanline)
     * }
     */
    public static MemorySegment FreeImage_GetScanLine$address() {
        return FreeImage_GetScanLine.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BYTE *FreeImage_GetScanLine(FIBITMAP *dib, int scanline)
     * }
     */
    public static MemorySegment FreeImage_GetScanLine(MemorySegment dib, int scanline) {
        var mh$ = FreeImage_GetScanLine.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetScanLine", dib, scanline);
            }
            return (MemorySegment)mh$.invokeExact(dib, scanline);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetPixelIndex {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetPixelIndex");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static FunctionDescriptor FreeImage_GetPixelIndex$descriptor() {
        return FreeImage_GetPixelIndex.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static MethodHandle FreeImage_GetPixelIndex$handle() {
        return FreeImage_GetPixelIndex.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static MemorySegment FreeImage_GetPixelIndex$address() {
        return FreeImage_GetPixelIndex.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static int FreeImage_GetPixelIndex(MemorySegment dib, int x, int y, MemorySegment value) {
        var mh$ = FreeImage_GetPixelIndex.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetPixelIndex", dib, x, y, value);
            }
            return (int)mh$.invokeExact(dib, x, y, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetPixelColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetPixelColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static FunctionDescriptor FreeImage_GetPixelColor$descriptor() {
        return FreeImage_GetPixelColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static MethodHandle FreeImage_GetPixelColor$handle() {
        return FreeImage_GetPixelColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static MemorySegment FreeImage_GetPixelColor$address() {
        return FreeImage_GetPixelColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static int FreeImage_GetPixelColor(MemorySegment dib, int x, int y, MemorySegment value) {
        var mh$ = FreeImage_GetPixelColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetPixelColor", dib, x, y, value);
            }
            return (int)mh$.invokeExact(dib, x, y, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetPixelIndex {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetPixelIndex");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static FunctionDescriptor FreeImage_SetPixelIndex$descriptor() {
        return FreeImage_SetPixelIndex.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static MethodHandle FreeImage_SetPixelIndex$handle() {
        return FreeImage_SetPixelIndex.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static MemorySegment FreeImage_SetPixelIndex$address() {
        return FreeImage_SetPixelIndex.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned int x, unsigned int y, BYTE *value)
     * }
     */
    public static int FreeImage_SetPixelIndex(MemorySegment dib, int x, int y, MemorySegment value) {
        var mh$ = FreeImage_SetPixelIndex.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetPixelIndex", dib, x, y, value);
            }
            return (int)mh$.invokeExact(dib, x, y, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetPixelColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetPixelColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static FunctionDescriptor FreeImage_SetPixelColor$descriptor() {
        return FreeImage_SetPixelColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static MethodHandle FreeImage_SetPixelColor$handle() {
        return FreeImage_SetPixelColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static MemorySegment FreeImage_SetPixelColor$address() {
        return FreeImage_SetPixelColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetPixelColor(FIBITMAP *dib, unsigned int x, unsigned int y, RGBQUAD *value)
     * }
     */
    public static int FreeImage_SetPixelColor(MemorySegment dib, int x, int y, MemorySegment value) {
        var mh$ = FreeImage_SetPixelColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetPixelColor", dib, x, y, value);
            }
            return (int)mh$.invokeExact(dib, x, y, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetColorsUsed {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetColorsUsed");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetColorsUsed(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetColorsUsed$descriptor() {
        return FreeImage_GetColorsUsed.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetColorsUsed(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetColorsUsed$handle() {
        return FreeImage_GetColorsUsed.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetColorsUsed(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetColorsUsed$address() {
        return FreeImage_GetColorsUsed.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetColorsUsed(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetColorsUsed(MemorySegment dib) {
        var mh$ = FreeImage_GetColorsUsed.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetColorsUsed", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetBPP {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetBPP");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBPP(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetBPP$descriptor() {
        return FreeImage_GetBPP.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBPP(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetBPP$handle() {
        return FreeImage_GetBPP.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBPP(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetBPP$address() {
        return FreeImage_GetBPP.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBPP(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetBPP(MemorySegment dib) {
        var mh$ = FreeImage_GetBPP.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetBPP", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetWidth {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetWidth");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetWidth(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetWidth$descriptor() {
        return FreeImage_GetWidth.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetWidth(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetWidth$handle() {
        return FreeImage_GetWidth.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetWidth(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetWidth$address() {
        return FreeImage_GetWidth.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetWidth(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetWidth(MemorySegment dib) {
        var mh$ = FreeImage_GetWidth.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetWidth", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetHeight {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetHeight");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetHeight(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetHeight$descriptor() {
        return FreeImage_GetHeight.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetHeight(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetHeight$handle() {
        return FreeImage_GetHeight.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetHeight(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetHeight$address() {
        return FreeImage_GetHeight.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetHeight(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetHeight(MemorySegment dib) {
        var mh$ = FreeImage_GetHeight.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetHeight", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetLine {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetLine");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetLine(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetLine$descriptor() {
        return FreeImage_GetLine.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetLine(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetLine$handle() {
        return FreeImage_GetLine.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetLine(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetLine$address() {
        return FreeImage_GetLine.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetLine(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetLine(MemorySegment dib) {
        var mh$ = FreeImage_GetLine.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetLine", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetPitch {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetPitch");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetPitch(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetPitch$descriptor() {
        return FreeImage_GetPitch.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetPitch(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetPitch$handle() {
        return FreeImage_GetPitch.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetPitch(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetPitch$address() {
        return FreeImage_GetPitch.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetPitch(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetPitch(MemorySegment dib) {
        var mh$ = FreeImage_GetPitch.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetPitch", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetDIBSize {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetDIBSize");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDIBSize(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetDIBSize$descriptor() {
        return FreeImage_GetDIBSize.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDIBSize(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetDIBSize$handle() {
        return FreeImage_GetDIBSize.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDIBSize(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetDIBSize$address() {
        return FreeImage_GetDIBSize.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDIBSize(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetDIBSize(MemorySegment dib) {
        var mh$ = FreeImage_GetDIBSize.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetDIBSize", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetMemorySize {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetMemorySize");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMemorySize(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetMemorySize$descriptor() {
        return FreeImage_GetMemorySize.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMemorySize(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetMemorySize$handle() {
        return FreeImage_GetMemorySize.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMemorySize(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetMemorySize$address() {
        return FreeImage_GetMemorySize.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMemorySize(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetMemorySize(MemorySegment dib) {
        var mh$ = FreeImage_GetMemorySize.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetMemorySize", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetPalette {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetPalette");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * RGBQUAD *FreeImage_GetPalette(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetPalette$descriptor() {
        return FreeImage_GetPalette.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * RGBQUAD *FreeImage_GetPalette(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetPalette$handle() {
        return FreeImage_GetPalette.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * RGBQUAD *FreeImage_GetPalette(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetPalette$address() {
        return FreeImage_GetPalette.ADDR;
    }

    /**
     * {@snippet lang=c :
     * RGBQUAD *FreeImage_GetPalette(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetPalette(MemorySegment dib) {
        var mh$ = FreeImage_GetPalette.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetPalette", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetDotsPerMeterX {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetDotsPerMeterX");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterX(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetDotsPerMeterX$descriptor() {
        return FreeImage_GetDotsPerMeterX.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterX(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetDotsPerMeterX$handle() {
        return FreeImage_GetDotsPerMeterX.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterX(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetDotsPerMeterX$address() {
        return FreeImage_GetDotsPerMeterX.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterX(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetDotsPerMeterX(MemorySegment dib) {
        var mh$ = FreeImage_GetDotsPerMeterX.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetDotsPerMeterX", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetDotsPerMeterY {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetDotsPerMeterY");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterY(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetDotsPerMeterY$descriptor() {
        return FreeImage_GetDotsPerMeterY.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterY(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetDotsPerMeterY$handle() {
        return FreeImage_GetDotsPerMeterY.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterY(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetDotsPerMeterY$address() {
        return FreeImage_GetDotsPerMeterY.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetDotsPerMeterY(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetDotsPerMeterY(MemorySegment dib) {
        var mh$ = FreeImage_GetDotsPerMeterY.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetDotsPerMeterY", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetDotsPerMeterX {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetDotsPerMeterX");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static FunctionDescriptor FreeImage_SetDotsPerMeterX$descriptor() {
        return FreeImage_SetDotsPerMeterX.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static MethodHandle FreeImage_SetDotsPerMeterX$handle() {
        return FreeImage_SetDotsPerMeterX.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static MemorySegment FreeImage_SetDotsPerMeterX$address() {
        return FreeImage_SetDotsPerMeterX.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterX(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static void FreeImage_SetDotsPerMeterX(MemorySegment dib, int res) {
        var mh$ = FreeImage_SetDotsPerMeterX.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetDotsPerMeterX", dib, res);
            }
            mh$.invokeExact(dib, res);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetDotsPerMeterY {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetDotsPerMeterY");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static FunctionDescriptor FreeImage_SetDotsPerMeterY$descriptor() {
        return FreeImage_SetDotsPerMeterY.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static MethodHandle FreeImage_SetDotsPerMeterY$handle() {
        return FreeImage_SetDotsPerMeterY.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static MemorySegment FreeImage_SetDotsPerMeterY$address() {
        return FreeImage_SetDotsPerMeterY.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetDotsPerMeterY(FIBITMAP *dib, unsigned int res)
     * }
     */
    public static void FreeImage_SetDotsPerMeterY(MemorySegment dib, int res) {
        var mh$ = FreeImage_SetDotsPerMeterY.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetDotsPerMeterY", dib, res);
            }
            mh$.invokeExact(dib, res);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetInfoHeader {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetInfoHeader");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BITMAPINFOHEADER *FreeImage_GetInfoHeader(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetInfoHeader$descriptor() {
        return FreeImage_GetInfoHeader.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BITMAPINFOHEADER *FreeImage_GetInfoHeader(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetInfoHeader$handle() {
        return FreeImage_GetInfoHeader.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BITMAPINFOHEADER *FreeImage_GetInfoHeader(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetInfoHeader$address() {
        return FreeImage_GetInfoHeader.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BITMAPINFOHEADER *FreeImage_GetInfoHeader(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetInfoHeader(MemorySegment dib) {
        var mh$ = FreeImage_GetInfoHeader.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetInfoHeader", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetInfo {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetInfo");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BITMAPINFO *FreeImage_GetInfo(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetInfo$descriptor() {
        return FreeImage_GetInfo.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BITMAPINFO *FreeImage_GetInfo(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetInfo$handle() {
        return FreeImage_GetInfo.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BITMAPINFO *FreeImage_GetInfo(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetInfo$address() {
        return FreeImage_GetInfo.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BITMAPINFO *FreeImage_GetInfo(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetInfo(MemorySegment dib) {
        var mh$ = FreeImage_GetInfo.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetInfo", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetColorType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetColorType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_COLOR_TYPE FreeImage_GetColorType(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetColorType$descriptor() {
        return FreeImage_GetColorType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_COLOR_TYPE FreeImage_GetColorType(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetColorType$handle() {
        return FreeImage_GetColorType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_COLOR_TYPE FreeImage_GetColorType(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetColorType$address() {
        return FreeImage_GetColorType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_COLOR_TYPE FreeImage_GetColorType(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetColorType(MemorySegment dib) {
        var mh$ = FreeImage_GetColorType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetColorType", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetRedMask {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetRedMask");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetRedMask(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetRedMask$descriptor() {
        return FreeImage_GetRedMask.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetRedMask(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetRedMask$handle() {
        return FreeImage_GetRedMask.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetRedMask(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetRedMask$address() {
        return FreeImage_GetRedMask.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetRedMask(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetRedMask(MemorySegment dib) {
        var mh$ = FreeImage_GetRedMask.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetRedMask", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetGreenMask {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetGreenMask");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetGreenMask(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetGreenMask$descriptor() {
        return FreeImage_GetGreenMask.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetGreenMask(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetGreenMask$handle() {
        return FreeImage_GetGreenMask.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetGreenMask(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetGreenMask$address() {
        return FreeImage_GetGreenMask.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetGreenMask(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetGreenMask(MemorySegment dib) {
        var mh$ = FreeImage_GetGreenMask.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetGreenMask", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetBlueMask {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetBlueMask");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBlueMask(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetBlueMask$descriptor() {
        return FreeImage_GetBlueMask.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBlueMask(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetBlueMask$handle() {
        return FreeImage_GetBlueMask.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBlueMask(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetBlueMask$address() {
        return FreeImage_GetBlueMask.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetBlueMask(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetBlueMask(MemorySegment dib) {
        var mh$ = FreeImage_GetBlueMask.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetBlueMask", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTransparencyCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTransparencyCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetTransparencyCount(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTransparencyCount$descriptor() {
        return FreeImage_GetTransparencyCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetTransparencyCount(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetTransparencyCount$handle() {
        return FreeImage_GetTransparencyCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetTransparencyCount(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetTransparencyCount$address() {
        return FreeImage_GetTransparencyCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetTransparencyCount(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetTransparencyCount(MemorySegment dib) {
        var mh$ = FreeImage_GetTransparencyCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTransparencyCount", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTransparencyTable {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTransparencyTable");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetTransparencyTable(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTransparencyTable$descriptor() {
        return FreeImage_GetTransparencyTable.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetTransparencyTable(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetTransparencyTable$handle() {
        return FreeImage_GetTransparencyTable.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BYTE *FreeImage_GetTransparencyTable(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetTransparencyTable$address() {
        return FreeImage_GetTransparencyTable.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BYTE *FreeImage_GetTransparencyTable(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetTransparencyTable(MemorySegment dib) {
        var mh$ = FreeImage_GetTransparencyTable.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTransparencyTable", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTransparent {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTransparent");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTransparent$descriptor() {
        return FreeImage_SetTransparent.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled)
     * }
     */
    public static MethodHandle FreeImage_SetTransparent$handle() {
        return FreeImage_SetTransparent.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled)
     * }
     */
    public static MemorySegment FreeImage_SetTransparent$address() {
        return FreeImage_SetTransparent.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled)
     * }
     */
    public static void FreeImage_SetTransparent(MemorySegment dib, int enabled) {
        var mh$ = FreeImage_SetTransparent.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTransparent", dib, enabled);
            }
            mh$.invokeExact(dib, enabled);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTransparencyTable {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTransparencyTable");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTransparencyTable$descriptor() {
        return FreeImage_SetTransparencyTable.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count)
     * }
     */
    public static MethodHandle FreeImage_SetTransparencyTable$handle() {
        return FreeImage_SetTransparencyTable.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count)
     * }
     */
    public static MemorySegment FreeImage_SetTransparencyTable$address() {
        return FreeImage_SetTransparencyTable.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count)
     * }
     */
    public static void FreeImage_SetTransparencyTable(MemorySegment dib, MemorySegment table, int count) {
        var mh$ = FreeImage_SetTransparencyTable.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTransparencyTable", dib, table, count);
            }
            mh$.invokeExact(dib, table, count);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_IsTransparent {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_IsTransparent");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsTransparent(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_IsTransparent$descriptor() {
        return FreeImage_IsTransparent.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsTransparent(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_IsTransparent$handle() {
        return FreeImage_IsTransparent.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_IsTransparent(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_IsTransparent$address() {
        return FreeImage_IsTransparent.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_IsTransparent(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_IsTransparent(MemorySegment dib) {
        var mh$ = FreeImage_IsTransparent.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_IsTransparent", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTransparentIndex {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTransparentIndex");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparentIndex(FIBITMAP *dib, int index)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTransparentIndex$descriptor() {
        return FreeImage_SetTransparentIndex.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparentIndex(FIBITMAP *dib, int index)
     * }
     */
    public static MethodHandle FreeImage_SetTransparentIndex$handle() {
        return FreeImage_SetTransparentIndex.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_SetTransparentIndex(FIBITMAP *dib, int index)
     * }
     */
    public static MemorySegment FreeImage_SetTransparentIndex$address() {
        return FreeImage_SetTransparentIndex.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_SetTransparentIndex(FIBITMAP *dib, int index)
     * }
     */
    public static void FreeImage_SetTransparentIndex(MemorySegment dib, int index) {
        var mh$ = FreeImage_SetTransparentIndex.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTransparentIndex", dib, index);
            }
            mh$.invokeExact(dib, index);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTransparentIndex {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTransparentIndex");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_GetTransparentIndex(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTransparentIndex$descriptor() {
        return FreeImage_GetTransparentIndex.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_GetTransparentIndex(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetTransparentIndex$handle() {
        return FreeImage_GetTransparentIndex.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_GetTransparentIndex(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetTransparentIndex$address() {
        return FreeImage_GetTransparentIndex.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_GetTransparentIndex(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetTransparentIndex(MemorySegment dib) {
        var mh$ = FreeImage_GetTransparentIndex.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTransparentIndex", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_HasBackgroundColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_HasBackgroundColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasBackgroundColor(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_HasBackgroundColor$descriptor() {
        return FreeImage_HasBackgroundColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasBackgroundColor(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_HasBackgroundColor$handle() {
        return FreeImage_HasBackgroundColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_HasBackgroundColor(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_HasBackgroundColor$address() {
        return FreeImage_HasBackgroundColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_HasBackgroundColor(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_HasBackgroundColor(MemorySegment dib) {
        var mh$ = FreeImage_HasBackgroundColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_HasBackgroundColor", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetBackgroundColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetBackgroundColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static FunctionDescriptor FreeImage_GetBackgroundColor$descriptor() {
        return FreeImage_GetBackgroundColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static MethodHandle FreeImage_GetBackgroundColor$handle() {
        return FreeImage_GetBackgroundColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static MemorySegment FreeImage_GetBackgroundColor$address() {
        return FreeImage_GetBackgroundColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static int FreeImage_GetBackgroundColor(MemorySegment dib, MemorySegment bkcolor) {
        var mh$ = FreeImage_GetBackgroundColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetBackgroundColor", dib, bkcolor);
            }
            return (int)mh$.invokeExact(dib, bkcolor);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetBackgroundColor {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetBackgroundColor");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static FunctionDescriptor FreeImage_SetBackgroundColor$descriptor() {
        return FreeImage_SetBackgroundColor.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static MethodHandle FreeImage_SetBackgroundColor$handle() {
        return FreeImage_SetBackgroundColor.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static MemorySegment FreeImage_SetBackgroundColor$address() {
        return FreeImage_SetBackgroundColor.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor)
     * }
     */
    public static int FreeImage_SetBackgroundColor(MemorySegment dib, MemorySegment bkcolor) {
        var mh$ = FreeImage_SetBackgroundColor.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetBackgroundColor", dib, bkcolor);
            }
            return (int)mh$.invokeExact(dib, bkcolor);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetThumbnail {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetThumbnail");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetThumbnail(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetThumbnail$descriptor() {
        return FreeImage_GetThumbnail.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetThumbnail(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetThumbnail$handle() {
        return FreeImage_GetThumbnail.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetThumbnail(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetThumbnail$address() {
        return FreeImage_GetThumbnail.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetThumbnail(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetThumbnail(MemorySegment dib) {
        var mh$ = FreeImage_GetThumbnail.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetThumbnail", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetThumbnail {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetThumbnail");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail)
     * }
     */
    public static FunctionDescriptor FreeImage_SetThumbnail$descriptor() {
        return FreeImage_SetThumbnail.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail)
     * }
     */
    public static MethodHandle FreeImage_SetThumbnail$handle() {
        return FreeImage_SetThumbnail.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail)
     * }
     */
    public static MemorySegment FreeImage_SetThumbnail$address() {
        return FreeImage_SetThumbnail.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetThumbnail(FIBITMAP *dib, FIBITMAP *thumbnail)
     * }
     */
    public static int FreeImage_SetThumbnail(MemorySegment dib, MemorySegment thumbnail) {
        var mh$ = FreeImage_SetThumbnail.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetThumbnail", dib, thumbnail);
            }
            return (int)mh$.invokeExact(dib, thumbnail);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetICCProfile {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetICCProfile");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_GetICCProfile(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetICCProfile$descriptor() {
        return FreeImage_GetICCProfile.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_GetICCProfile(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetICCProfile$handle() {
        return FreeImage_GetICCProfile.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_GetICCProfile(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetICCProfile$address() {
        return FreeImage_GetICCProfile.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_GetICCProfile(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetICCProfile(MemorySegment dib) {
        var mh$ = FreeImage_GetICCProfile.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetICCProfile", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CreateICCProfile {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_LONG
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CreateICCProfile");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size)
     * }
     */
    public static FunctionDescriptor FreeImage_CreateICCProfile$descriptor() {
        return FreeImage_CreateICCProfile.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size)
     * }
     */
    public static MethodHandle FreeImage_CreateICCProfile$handle() {
        return FreeImage_CreateICCProfile.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size)
     * }
     */
    public static MemorySegment FreeImage_CreateICCProfile$address() {
        return FreeImage_CreateICCProfile.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIICCPROFILE *FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size)
     * }
     */
    public static MemorySegment FreeImage_CreateICCProfile(MemorySegment dib, MemorySegment data, long size) {
        var mh$ = FreeImage_CreateICCProfile.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CreateICCProfile", dib, data, size);
            }
            return (MemorySegment)mh$.invokeExact(dib, data, size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_DestroyICCProfile {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_DestroyICCProfile");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_DestroyICCProfile(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_DestroyICCProfile$descriptor() {
        return FreeImage_DestroyICCProfile.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_DestroyICCProfile(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_DestroyICCProfile$handle() {
        return FreeImage_DestroyICCProfile.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_DestroyICCProfile(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_DestroyICCProfile$address() {
        return FreeImage_DestroyICCProfile.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_DestroyICCProfile(FIBITMAP *dib)
     * }
     */
    public static void FreeImage_DestroyICCProfile(MemorySegment dib) {
        var mh$ = FreeImage_DestroyICCProfile.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_DestroyICCProfile", dib);
            }
            mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To4 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To4");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To4$descriptor() {
        return FreeImage_ConvertLine1To4.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To4$handle() {
        return FreeImage_ConvertLine1To4.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To4$address() {
        return FreeImage_ConvertLine1To4.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine1To4(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine1To4.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To4", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To4 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To4");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To4$descriptor() {
        return FreeImage_ConvertLine8To4.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To4$handle() {
        return FreeImage_ConvertLine8To4.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To4$address() {
        return FreeImage_ConvertLine8To4.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine8To4(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine8To4.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To4", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To4_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To4_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To4_555$descriptor() {
        return FreeImage_ConvertLine16To4_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To4_555$handle() {
        return FreeImage_ConvertLine16To4_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To4_555$address() {
        return FreeImage_ConvertLine16To4_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To4_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To4_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To4_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To4_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To4_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To4_565$descriptor() {
        return FreeImage_ConvertLine16To4_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To4_565$handle() {
        return FreeImage_ConvertLine16To4_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To4_565$address() {
        return FreeImage_ConvertLine16To4_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To4_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To4_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To4_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine24To4 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine24To4");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine24To4$descriptor() {
        return FreeImage_ConvertLine24To4.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine24To4$handle() {
        return FreeImage_ConvertLine24To4.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine24To4$address() {
        return FreeImage_ConvertLine24To4.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine24To4(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine24To4.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine24To4", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine32To4 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine32To4");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine32To4$descriptor() {
        return FreeImage_ConvertLine32To4.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine32To4$handle() {
        return FreeImage_ConvertLine32To4.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine32To4$address() {
        return FreeImage_ConvertLine32To4.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine32To4(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine32To4.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine32To4", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To8 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To8");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To8$descriptor() {
        return FreeImage_ConvertLine1To8.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To8$handle() {
        return FreeImage_ConvertLine1To8.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To8$address() {
        return FreeImage_ConvertLine1To8.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine1To8(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine1To8.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To8", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To8 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To8");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To8$descriptor() {
        return FreeImage_ConvertLine4To8.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To8$handle() {
        return FreeImage_ConvertLine4To8.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To8$address() {
        return FreeImage_ConvertLine4To8.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine4To8(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine4To8.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To8", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To8_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To8_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To8_555$descriptor() {
        return FreeImage_ConvertLine16To8_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To8_555$handle() {
        return FreeImage_ConvertLine16To8_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To8_555$address() {
        return FreeImage_ConvertLine16To8_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To8_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To8_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To8_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To8_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To8_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To8_565$descriptor() {
        return FreeImage_ConvertLine16To8_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To8_565$handle() {
        return FreeImage_ConvertLine16To8_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To8_565$address() {
        return FreeImage_ConvertLine16To8_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To8_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To8_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To8_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine24To8 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine24To8");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine24To8$descriptor() {
        return FreeImage_ConvertLine24To8.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine24To8$handle() {
        return FreeImage_ConvertLine24To8.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine24To8$address() {
        return FreeImage_ConvertLine24To8.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine24To8(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine24To8.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine24To8", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine32To8 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine32To8");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine32To8$descriptor() {
        return FreeImage_ConvertLine32To8.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine32To8$handle() {
        return FreeImage_ConvertLine32To8.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine32To8$address() {
        return FreeImage_ConvertLine32To8.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine32To8(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine32To8.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine32To8", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To16_555$descriptor() {
        return FreeImage_ConvertLine1To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To16_555$handle() {
        return FreeImage_ConvertLine1To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To16_555$address() {
        return FreeImage_ConvertLine1To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine1To16_555(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine1To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To16_555", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To16_555$descriptor() {
        return FreeImage_ConvertLine4To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To16_555$handle() {
        return FreeImage_ConvertLine4To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To16_555$address() {
        return FreeImage_ConvertLine4To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine4To16_555(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine4To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To16_555", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To16_555$descriptor() {
        return FreeImage_ConvertLine8To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To16_555$handle() {
        return FreeImage_ConvertLine8To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To16_555$address() {
        return FreeImage_ConvertLine8To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine8To16_555(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine8To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To16_555", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16_565_To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16_565_To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16_565_To16_555$descriptor() {
        return FreeImage_ConvertLine16_565_To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16_565_To16_555$handle() {
        return FreeImage_ConvertLine16_565_To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16_565_To16_555$address() {
        return FreeImage_ConvertLine16_565_To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16_565_To16_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16_565_To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16_565_To16_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine24To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine24To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine24To16_555$descriptor() {
        return FreeImage_ConvertLine24To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine24To16_555$handle() {
        return FreeImage_ConvertLine24To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine24To16_555$address() {
        return FreeImage_ConvertLine24To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine24To16_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine24To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine24To16_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine32To16_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine32To16_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine32To16_555$descriptor() {
        return FreeImage_ConvertLine32To16_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine32To16_555$handle() {
        return FreeImage_ConvertLine32To16_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine32To16_555$address() {
        return FreeImage_ConvertLine32To16_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine32To16_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine32To16_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine32To16_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To16_565$descriptor() {
        return FreeImage_ConvertLine1To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To16_565$handle() {
        return FreeImage_ConvertLine1To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To16_565$address() {
        return FreeImage_ConvertLine1To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine1To16_565(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine1To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To16_565", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To16_565$descriptor() {
        return FreeImage_ConvertLine4To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To16_565$handle() {
        return FreeImage_ConvertLine4To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To16_565$address() {
        return FreeImage_ConvertLine4To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine4To16_565(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine4To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To16_565", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To16_565$descriptor() {
        return FreeImage_ConvertLine8To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To16_565$handle() {
        return FreeImage_ConvertLine8To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To16_565$address() {
        return FreeImage_ConvertLine8To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine8To16_565(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine8To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To16_565", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16_555_To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16_555_To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16_555_To16_565$descriptor() {
        return FreeImage_ConvertLine16_555_To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16_555_To16_565$handle() {
        return FreeImage_ConvertLine16_555_To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16_555_To16_565$address() {
        return FreeImage_ConvertLine16_555_To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16_555_To16_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16_555_To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16_555_To16_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine24To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine24To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine24To16_565$descriptor() {
        return FreeImage_ConvertLine24To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine24To16_565$handle() {
        return FreeImage_ConvertLine24To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine24To16_565$address() {
        return FreeImage_ConvertLine24To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine24To16_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine24To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine24To16_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine32To16_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine32To16_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine32To16_565$descriptor() {
        return FreeImage_ConvertLine32To16_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine32To16_565$handle() {
        return FreeImage_ConvertLine32To16_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine32To16_565$address() {
        return FreeImage_ConvertLine32To16_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine32To16_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine32To16_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine32To16_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To24 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To24");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To24$descriptor() {
        return FreeImage_ConvertLine1To24.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To24$handle() {
        return FreeImage_ConvertLine1To24.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To24$address() {
        return FreeImage_ConvertLine1To24.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine1To24(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine1To24.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To24", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To24 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To24");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To24$descriptor() {
        return FreeImage_ConvertLine4To24.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To24$handle() {
        return FreeImage_ConvertLine4To24.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To24$address() {
        return FreeImage_ConvertLine4To24.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine4To24(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine4To24.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To24", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To24 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To24");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To24$descriptor() {
        return FreeImage_ConvertLine8To24.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To24$handle() {
        return FreeImage_ConvertLine8To24.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To24$address() {
        return FreeImage_ConvertLine8To24.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine8To24(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine8To24.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To24", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To24_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To24_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To24_555$descriptor() {
        return FreeImage_ConvertLine16To24_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To24_555$handle() {
        return FreeImage_ConvertLine16To24_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To24_555$address() {
        return FreeImage_ConvertLine16To24_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To24_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To24_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To24_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To24_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To24_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To24_565$descriptor() {
        return FreeImage_ConvertLine16To24_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To24_565$handle() {
        return FreeImage_ConvertLine16To24_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To24_565$address() {
        return FreeImage_ConvertLine16To24_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To24_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To24_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To24_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine32To24 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine32To24");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine32To24$descriptor() {
        return FreeImage_ConvertLine32To24.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine32To24$handle() {
        return FreeImage_ConvertLine32To24.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine32To24$address() {
        return FreeImage_ConvertLine32To24.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine32To24(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine32To24.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine32To24", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To32 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To32");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To32$descriptor() {
        return FreeImage_ConvertLine1To32.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To32$handle() {
        return FreeImage_ConvertLine1To32.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To32$address() {
        return FreeImage_ConvertLine1To32.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine1To32(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine1To32.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To32", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine1To32MapTransparency {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine1To32MapTransparency");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine1To32MapTransparency$descriptor() {
        return FreeImage_ConvertLine1To32MapTransparency.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine1To32MapTransparency$handle() {
        return FreeImage_ConvertLine1To32MapTransparency.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine1To32MapTransparency$address() {
        return FreeImage_ConvertLine1To32MapTransparency.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine1To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static void FreeImage_ConvertLine1To32MapTransparency(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette, MemorySegment table, int transparent_pixels) {
        var mh$ = FreeImage_ConvertLine1To32MapTransparency.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine1To32MapTransparency", target, source, width_in_pixels, palette, table, transparent_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette, table, transparent_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To32 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To32");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To32$descriptor() {
        return FreeImage_ConvertLine4To32.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To32$handle() {
        return FreeImage_ConvertLine4To32.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To32$address() {
        return FreeImage_ConvertLine4To32.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine4To32(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine4To32.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To32", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine4To32MapTransparency {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine4To32MapTransparency");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine4To32MapTransparency$descriptor() {
        return FreeImage_ConvertLine4To32MapTransparency.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine4To32MapTransparency$handle() {
        return FreeImage_ConvertLine4To32MapTransparency.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine4To32MapTransparency$address() {
        return FreeImage_ConvertLine4To32MapTransparency.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine4To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static void FreeImage_ConvertLine4To32MapTransparency(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette, MemorySegment table, int transparent_pixels) {
        var mh$ = FreeImage_ConvertLine4To32MapTransparency.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine4To32MapTransparency", target, source, width_in_pixels, palette, table, transparent_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette, table, transparent_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To32 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To32");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To32$descriptor() {
        return FreeImage_ConvertLine8To32.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To32$handle() {
        return FreeImage_ConvertLine8To32.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To32$address() {
        return FreeImage_ConvertLine8To32.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette)
     * }
     */
    public static void FreeImage_ConvertLine8To32(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette) {
        var mh$ = FreeImage_ConvertLine8To32.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To32", target, source, width_in_pixels, palette);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine8To32MapTransparency {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine8To32MapTransparency");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine8To32MapTransparency$descriptor() {
        return FreeImage_ConvertLine8To32MapTransparency.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine8To32MapTransparency$handle() {
        return FreeImage_ConvertLine8To32MapTransparency.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine8To32MapTransparency$address() {
        return FreeImage_ConvertLine8To32MapTransparency.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine8To32MapTransparency(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette, BYTE *table, int transparent_pixels)
     * }
     */
    public static void FreeImage_ConvertLine8To32MapTransparency(MemorySegment target, MemorySegment source, int width_in_pixels, MemorySegment palette, MemorySegment table, int transparent_pixels) {
        var mh$ = FreeImage_ConvertLine8To32MapTransparency.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine8To32MapTransparency", target, source, width_in_pixels, palette, table, transparent_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels, palette, table, transparent_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To32_555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To32_555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To32_555$descriptor() {
        return FreeImage_ConvertLine16To32_555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To32_555$handle() {
        return FreeImage_ConvertLine16To32_555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To32_555$address() {
        return FreeImage_ConvertLine16To32_555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To32_555(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To32_555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To32_555", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine16To32_565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine16To32_565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine16To32_565$descriptor() {
        return FreeImage_ConvertLine16To32_565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine16To32_565$handle() {
        return FreeImage_ConvertLine16To32_565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine16To32_565$address() {
        return FreeImage_ConvertLine16To32_565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine16To32_565(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine16To32_565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine16To32_565", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertLine24To32 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertLine24To32");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertLine24To32$descriptor() {
        return FreeImage_ConvertLine24To32.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MethodHandle FreeImage_ConvertLine24To32$handle() {
        return FreeImage_ConvertLine24To32.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static MemorySegment FreeImage_ConvertLine24To32$address() {
        return FreeImage_ConvertLine24To32.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels)
     * }
     */
    public static void FreeImage_ConvertLine24To32(MemorySegment target, MemorySegment source, int width_in_pixels) {
        var mh$ = FreeImage_ConvertLine24To32.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertLine24To32", target, source, width_in_pixels);
            }
            mh$.invokeExact(target, source, width_in_pixels);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo4Bits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo4Bits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo4Bits(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo4Bits$descriptor() {
        return FreeImage_ConvertTo4Bits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo4Bits(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo4Bits$handle() {
        return FreeImage_ConvertTo4Bits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo4Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo4Bits$address() {
        return FreeImage_ConvertTo4Bits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo4Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo4Bits(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo4Bits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo4Bits", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo8Bits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo8Bits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo8Bits(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo8Bits$descriptor() {
        return FreeImage_ConvertTo8Bits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo8Bits(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo8Bits$handle() {
        return FreeImage_ConvertTo8Bits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo8Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo8Bits$address() {
        return FreeImage_ConvertTo8Bits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo8Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo8Bits(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo8Bits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo8Bits", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToGreyscale {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToGreyscale");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToGreyscale(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToGreyscale$descriptor() {
        return FreeImage_ConvertToGreyscale.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToGreyscale(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToGreyscale$handle() {
        return FreeImage_ConvertToGreyscale.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToGreyscale(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToGreyscale$address() {
        return FreeImage_ConvertToGreyscale.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToGreyscale(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToGreyscale(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToGreyscale.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToGreyscale", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo16Bits555 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo16Bits555");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits555(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo16Bits555$descriptor() {
        return FreeImage_ConvertTo16Bits555.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits555(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo16Bits555$handle() {
        return FreeImage_ConvertTo16Bits555.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits555(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo16Bits555$address() {
        return FreeImage_ConvertTo16Bits555.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits555(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo16Bits555(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo16Bits555.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo16Bits555", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo16Bits565 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo16Bits565");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits565(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo16Bits565$descriptor() {
        return FreeImage_ConvertTo16Bits565.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits565(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo16Bits565$handle() {
        return FreeImage_ConvertTo16Bits565.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits565(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo16Bits565$address() {
        return FreeImage_ConvertTo16Bits565.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo16Bits565(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo16Bits565(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo16Bits565.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo16Bits565", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo24Bits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo24Bits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo24Bits(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo24Bits$descriptor() {
        return FreeImage_ConvertTo24Bits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo24Bits(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo24Bits$handle() {
        return FreeImage_ConvertTo24Bits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo24Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo24Bits$address() {
        return FreeImage_ConvertTo24Bits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo24Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo24Bits(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo24Bits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo24Bits", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertTo32Bits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertTo32Bits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo32Bits(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertTo32Bits$descriptor() {
        return FreeImage_ConvertTo32Bits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo32Bits(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertTo32Bits$handle() {
        return FreeImage_ConvertTo32Bits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo32Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo32Bits$address() {
        return FreeImage_ConvertTo32Bits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertTo32Bits(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertTo32Bits(MemorySegment dib) {
        var mh$ = FreeImage_ConvertTo32Bits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertTo32Bits", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ColorQuantize {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ColorQuantize");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize)
     * }
     */
    public static FunctionDescriptor FreeImage_ColorQuantize$descriptor() {
        return FreeImage_ColorQuantize.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize)
     * }
     */
    public static MethodHandle FreeImage_ColorQuantize$handle() {
        return FreeImage_ColorQuantize.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize)
     * }
     */
    public static MemorySegment FreeImage_ColorQuantize$address() {
        return FreeImage_ColorQuantize.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize)
     * }
     */
    public static MemorySegment FreeImage_ColorQuantize(MemorySegment dib, int quantize) {
        var mh$ = FreeImage_ColorQuantize.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ColorQuantize", dib, quantize);
            }
            return (MemorySegment)mh$.invokeExact(dib, quantize);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ColorQuantizeEx {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ColorQuantizeEx");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize, int PaletteSize, int ReserveSize, RGBQUAD *ReservePalette)
     * }
     */
    public static FunctionDescriptor FreeImage_ColorQuantizeEx$descriptor() {
        return FreeImage_ColorQuantizeEx.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize, int PaletteSize, int ReserveSize, RGBQUAD *ReservePalette)
     * }
     */
    public static MethodHandle FreeImage_ColorQuantizeEx$handle() {
        return FreeImage_ColorQuantizeEx.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize, int PaletteSize, int ReserveSize, RGBQUAD *ReservePalette)
     * }
     */
    public static MemorySegment FreeImage_ColorQuantizeEx$address() {
        return FreeImage_ColorQuantizeEx.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ColorQuantizeEx(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize, int PaletteSize, int ReserveSize, RGBQUAD *ReservePalette)
     * }
     */
    public static MemorySegment FreeImage_ColorQuantizeEx(MemorySegment dib, int quantize, int PaletteSize, int ReserveSize, MemorySegment ReservePalette) {
        var mh$ = FreeImage_ColorQuantizeEx.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ColorQuantizeEx", dib, quantize, PaletteSize, ReserveSize, ReservePalette);
            }
            return (MemorySegment)mh$.invokeExact(dib, quantize, PaletteSize, ReserveSize, ReservePalette);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Threshold {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_CHAR
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Threshold");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Threshold(FIBITMAP *dib, BYTE T)
     * }
     */
    public static FunctionDescriptor FreeImage_Threshold$descriptor() {
        return FreeImage_Threshold.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Threshold(FIBITMAP *dib, BYTE T)
     * }
     */
    public static MethodHandle FreeImage_Threshold$handle() {
        return FreeImage_Threshold.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Threshold(FIBITMAP *dib, BYTE T)
     * }
     */
    public static MemorySegment FreeImage_Threshold$address() {
        return FreeImage_Threshold.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Threshold(FIBITMAP *dib, BYTE T)
     * }
     */
    public static MemorySegment FreeImage_Threshold(MemorySegment dib, byte T) {
        var mh$ = FreeImage_Threshold.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Threshold", dib, T);
            }
            return (MemorySegment)mh$.invokeExact(dib, T);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Dither {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Dither");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm)
     * }
     */
    public static FunctionDescriptor FreeImage_Dither$descriptor() {
        return FreeImage_Dither.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm)
     * }
     */
    public static MethodHandle FreeImage_Dither$handle() {
        return FreeImage_Dither.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm)
     * }
     */
    public static MemorySegment FreeImage_Dither$address() {
        return FreeImage_Dither.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm)
     * }
     */
    public static MemorySegment FreeImage_Dither(MemorySegment dib, int algorithm) {
        var mh$ = FreeImage_Dither.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Dither", dib, algorithm);
            }
            return (MemorySegment)mh$.invokeExact(dib, algorithm);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertFromRawBits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertFromRawBits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertFromRawBits$descriptor() {
        return FreeImage_ConvertFromRawBits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MethodHandle FreeImage_ConvertFromRawBits$handle() {
        return FreeImage_ConvertFromRawBits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MemorySegment FreeImage_ConvertFromRawBits$address() {
        return FreeImage_ConvertFromRawBits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MemorySegment FreeImage_ConvertFromRawBits(MemorySegment bits, int width, int height, int pitch, int bpp, int red_mask, int green_mask, int blue_mask, int topdown) {
        var mh$ = FreeImage_ConvertFromRawBits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertFromRawBits", bits, width, height, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
            }
            return (MemorySegment)mh$.invokeExact(bits, width, height, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertFromRawBitsEx {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertFromRawBitsEx");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertFromRawBitsEx$descriptor() {
        return FreeImage_ConvertFromRawBitsEx.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MethodHandle FreeImage_ConvertFromRawBitsEx$handle() {
        return FreeImage_ConvertFromRawBitsEx.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MemorySegment FreeImage_ConvertFromRawBitsEx$address() {
        return FreeImage_ConvertFromRawBitsEx.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertFromRawBitsEx(BOOL copySource, BYTE *bits, FREE_IMAGE_TYPE type, int width, int height, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MemorySegment FreeImage_ConvertFromRawBitsEx(int copySource, MemorySegment bits, int type, int width, int height, int pitch, int bpp, int red_mask, int green_mask, int blue_mask, int topdown) {
        var mh$ = FreeImage_ConvertFromRawBitsEx.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertFromRawBitsEx", copySource, bits, type, width, height, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
            }
            return (MemorySegment)mh$.invokeExact(copySource, bits, type, width, height, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToRawBits {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToRawBits");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToRawBits$descriptor() {
        return FreeImage_ConvertToRawBits.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MethodHandle FreeImage_ConvertToRawBits$handle() {
        return FreeImage_ConvertToRawBits.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRawBits$address() {
        return FreeImage_ConvertToRawBits.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned int bpp, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask, BOOL topdown)
     * }
     */
    public static void FreeImage_ConvertToRawBits(MemorySegment bits, MemorySegment dib, int pitch, int bpp, int red_mask, int green_mask, int blue_mask, int topdown) {
        var mh$ = FreeImage_ConvertToRawBits.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToRawBits", bits, dib, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
            }
            mh$.invokeExact(bits, dib, pitch, bpp, red_mask, green_mask, blue_mask, topdown);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToFloat {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToFloat");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToFloat(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToFloat$descriptor() {
        return FreeImage_ConvertToFloat.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToFloat(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToFloat$handle() {
        return FreeImage_ConvertToFloat.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToFloat(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToFloat$address() {
        return FreeImage_ConvertToFloat.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToFloat(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToFloat(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToFloat.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToFloat", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToRGBF {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToRGBF");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBF(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToRGBF$descriptor() {
        return FreeImage_ConvertToRGBF.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBF(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToRGBF$handle() {
        return FreeImage_ConvertToRGBF.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBF(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBF$address() {
        return FreeImage_ConvertToRGBF.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBF(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBF(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToRGBF.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToRGBF", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToRGBAF {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToRGBAF");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBAF(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToRGBAF$descriptor() {
        return FreeImage_ConvertToRGBAF.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBAF(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToRGBAF$handle() {
        return FreeImage_ConvertToRGBAF.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBAF(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBAF$address() {
        return FreeImage_ConvertToRGBAF.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBAF(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBAF(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToRGBAF.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToRGBAF", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToUINT16 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToUINT16");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToUINT16(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToUINT16$descriptor() {
        return FreeImage_ConvertToUINT16.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToUINT16(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToUINT16$handle() {
        return FreeImage_ConvertToUINT16.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToUINT16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToUINT16$address() {
        return FreeImage_ConvertToUINT16.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToUINT16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToUINT16(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToUINT16.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToUINT16", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToRGB16 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToRGB16");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGB16(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToRGB16$descriptor() {
        return FreeImage_ConvertToRGB16.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGB16(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToRGB16$handle() {
        return FreeImage_ConvertToRGB16.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGB16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGB16$address() {
        return FreeImage_ConvertToRGB16.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGB16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGB16(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToRGB16.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToRGB16", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToRGBA16 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToRGBA16");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBA16(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToRGBA16$descriptor() {
        return FreeImage_ConvertToRGBA16.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBA16(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_ConvertToRGBA16$handle() {
        return FreeImage_ConvertToRGBA16.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBA16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBA16$address() {
        return FreeImage_ConvertToRGBA16.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToRGBA16(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_ConvertToRGBA16(MemorySegment dib) {
        var mh$ = FreeImage_ConvertToRGBA16.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToRGBA16", dib);
            }
            return (MemorySegment)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToStandardType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToStandardType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToStandardType$descriptor() {
        return FreeImage_ConvertToStandardType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear)
     * }
     */
    public static MethodHandle FreeImage_ConvertToStandardType$handle() {
        return FreeImage_ConvertToStandardType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear)
     * }
     */
    public static MemorySegment FreeImage_ConvertToStandardType$address() {
        return FreeImage_ConvertToStandardType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear)
     * }
     */
    public static MemorySegment FreeImage_ConvertToStandardType(MemorySegment src, int scale_linear) {
        var mh$ = FreeImage_ConvertToStandardType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToStandardType", src, scale_linear);
            }
            return (MemorySegment)mh$.invokeExact(src, scale_linear);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ConvertToType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ConvertToType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear)
     * }
     */
    public static FunctionDescriptor FreeImage_ConvertToType$descriptor() {
        return FreeImage_ConvertToType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear)
     * }
     */
    public static MethodHandle FreeImage_ConvertToType$handle() {
        return FreeImage_ConvertToType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear)
     * }
     */
    public static MemorySegment FreeImage_ConvertToType$address() {
        return FreeImage_ConvertToType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear)
     * }
     */
    public static MemorySegment FreeImage_ConvertToType(MemorySegment src, int dst_type, int scale_linear) {
        var mh$ = FreeImage_ConvertToType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ConvertToType", src, dst_type, scale_linear);
            }
            return (MemorySegment)mh$.invokeExact(src, dst_type, scale_linear);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ToneMapping {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ToneMapping");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param, double second_param)
     * }
     */
    public static FunctionDescriptor FreeImage_ToneMapping$descriptor() {
        return FreeImage_ToneMapping.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param, double second_param)
     * }
     */
    public static MethodHandle FreeImage_ToneMapping$handle() {
        return FreeImage_ToneMapping.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param, double second_param)
     * }
     */
    public static MemorySegment FreeImage_ToneMapping$address() {
        return FreeImage_ToneMapping.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_ToneMapping(FIBITMAP *dib, FREE_IMAGE_TMO tmo, double first_param, double second_param)
     * }
     */
    public static MemorySegment FreeImage_ToneMapping(MemorySegment dib, int tmo, double first_param, double second_param) {
        var mh$ = FreeImage_ToneMapping.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ToneMapping", dib, tmo, first_param, second_param);
            }
            return (MemorySegment)mh$.invokeExact(dib, tmo, first_param, second_param);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TmoDrago03 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TmoDrago03");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoDrago03(FIBITMAP *src, double gamma, double exposure)
     * }
     */
    public static FunctionDescriptor FreeImage_TmoDrago03$descriptor() {
        return FreeImage_TmoDrago03.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoDrago03(FIBITMAP *src, double gamma, double exposure)
     * }
     */
    public static MethodHandle FreeImage_TmoDrago03$handle() {
        return FreeImage_TmoDrago03.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoDrago03(FIBITMAP *src, double gamma, double exposure)
     * }
     */
    public static MemorySegment FreeImage_TmoDrago03$address() {
        return FreeImage_TmoDrago03.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoDrago03(FIBITMAP *src, double gamma, double exposure)
     * }
     */
    public static MemorySegment FreeImage_TmoDrago03(MemorySegment src, double gamma, double exposure) {
        var mh$ = FreeImage_TmoDrago03.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TmoDrago03", src, gamma, exposure);
            }
            return (MemorySegment)mh$.invokeExact(src, gamma, exposure);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TmoReinhard05 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TmoReinhard05");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05(FIBITMAP *src, double intensity, double contrast)
     * }
     */
    public static FunctionDescriptor FreeImage_TmoReinhard05$descriptor() {
        return FreeImage_TmoReinhard05.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05(FIBITMAP *src, double intensity, double contrast)
     * }
     */
    public static MethodHandle FreeImage_TmoReinhard05$handle() {
        return FreeImage_TmoReinhard05.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05(FIBITMAP *src, double intensity, double contrast)
     * }
     */
    public static MemorySegment FreeImage_TmoReinhard05$address() {
        return FreeImage_TmoReinhard05.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05(FIBITMAP *src, double intensity, double contrast)
     * }
     */
    public static MemorySegment FreeImage_TmoReinhard05(MemorySegment src, double intensity, double contrast) {
        var mh$ = FreeImage_TmoReinhard05.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TmoReinhard05", src, intensity, contrast);
            }
            return (MemorySegment)mh$.invokeExact(src, intensity, contrast);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TmoReinhard05Ex {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TmoReinhard05Ex");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity, double contrast, double adaptation, double color_correction)
     * }
     */
    public static FunctionDescriptor FreeImage_TmoReinhard05Ex$descriptor() {
        return FreeImage_TmoReinhard05Ex.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity, double contrast, double adaptation, double color_correction)
     * }
     */
    public static MethodHandle FreeImage_TmoReinhard05Ex$handle() {
        return FreeImage_TmoReinhard05Ex.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity, double contrast, double adaptation, double color_correction)
     * }
     */
    public static MemorySegment FreeImage_TmoReinhard05Ex$address() {
        return FreeImage_TmoReinhard05Ex.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoReinhard05Ex(FIBITMAP *src, double intensity, double contrast, double adaptation, double color_correction)
     * }
     */
    public static MemorySegment FreeImage_TmoReinhard05Ex(MemorySegment src, double intensity, double contrast, double adaptation, double color_correction) {
        var mh$ = FreeImage_TmoReinhard05Ex.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TmoReinhard05Ex", src, intensity, contrast, adaptation, color_correction);
            }
            return (MemorySegment)mh$.invokeExact(src, intensity, contrast, adaptation, color_correction);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TmoFattal02 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TmoFattal02");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation, double attenuation)
     * }
     */
    public static FunctionDescriptor FreeImage_TmoFattal02$descriptor() {
        return FreeImage_TmoFattal02.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation, double attenuation)
     * }
     */
    public static MethodHandle FreeImage_TmoFattal02$handle() {
        return FreeImage_TmoFattal02.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation, double attenuation)
     * }
     */
    public static MemorySegment FreeImage_TmoFattal02$address() {
        return FreeImage_TmoFattal02.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_TmoFattal02(FIBITMAP *src, double color_saturation, double attenuation)
     * }
     */
    public static MemorySegment FreeImage_TmoFattal02(MemorySegment src, double color_saturation, double attenuation) {
        var mh$ = FreeImage_TmoFattal02.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TmoFattal02", src, color_saturation, attenuation);
            }
            return (MemorySegment)mh$.invokeExact(src, color_saturation, attenuation);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ZLibCompress {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ZLibCompress");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static FunctionDescriptor FreeImage_ZLibCompress$descriptor() {
        return FreeImage_ZLibCompress.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MethodHandle FreeImage_ZLibCompress$handle() {
        return FreeImage_ZLibCompress.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MemorySegment FreeImage_ZLibCompress$address() {
        return FreeImage_ZLibCompress.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static int FreeImage_ZLibCompress(MemorySegment target, int target_size, MemorySegment source, int source_size) {
        var mh$ = FreeImage_ZLibCompress.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ZLibCompress", target, target_size, source, source_size);
            }
            return (int)mh$.invokeExact(target, target_size, source, source_size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ZLibUncompress {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ZLibUncompress");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static FunctionDescriptor FreeImage_ZLibUncompress$descriptor() {
        return FreeImage_ZLibUncompress.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MethodHandle FreeImage_ZLibUncompress$handle() {
        return FreeImage_ZLibUncompress.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MemorySegment FreeImage_ZLibUncompress$address() {
        return FreeImage_ZLibUncompress.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static int FreeImage_ZLibUncompress(MemorySegment target, int target_size, MemorySegment source, int source_size) {
        var mh$ = FreeImage_ZLibUncompress.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ZLibUncompress", target, target_size, source, source_size);
            }
            return (int)mh$.invokeExact(target, target_size, source, source_size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ZLibGZip {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ZLibGZip");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static FunctionDescriptor FreeImage_ZLibGZip$descriptor() {
        return FreeImage_ZLibGZip.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MethodHandle FreeImage_ZLibGZip$handle() {
        return FreeImage_ZLibGZip.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MemorySegment FreeImage_ZLibGZip$address() {
        return FreeImage_ZLibGZip.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGZip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static int FreeImage_ZLibGZip(MemorySegment target, int target_size, MemorySegment source, int source_size) {
        var mh$ = FreeImage_ZLibGZip.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ZLibGZip", target, target_size, source, source_size);
            }
            return (int)mh$.invokeExact(target, target_size, source, source_size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ZLibGUnzip {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ZLibGUnzip");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static FunctionDescriptor FreeImage_ZLibGUnzip$descriptor() {
        return FreeImage_ZLibGUnzip.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MethodHandle FreeImage_ZLibGUnzip$handle() {
        return FreeImage_ZLibGUnzip.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static MemorySegment FreeImage_ZLibGUnzip$address() {
        return FreeImage_ZLibGUnzip.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibGUnzip(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size)
     * }
     */
    public static int FreeImage_ZLibGUnzip(MemorySegment target, int target_size, MemorySegment source, int source_size) {
        var mh$ = FreeImage_ZLibGUnzip.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ZLibGUnzip", target, target_size, source, source_size);
            }
            return (int)mh$.invokeExact(target, target_size, source, source_size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ZLibCRC32 {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ZLibCRC32");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size)
     * }
     */
    public static FunctionDescriptor FreeImage_ZLibCRC32$descriptor() {
        return FreeImage_ZLibCRC32.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size)
     * }
     */
    public static MethodHandle FreeImage_ZLibCRC32$handle() {
        return FreeImage_ZLibCRC32.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size)
     * }
     */
    public static MemorySegment FreeImage_ZLibCRC32$address() {
        return FreeImage_ZLibCRC32.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_ZLibCRC32(DWORD crc, BYTE *source, DWORD source_size)
     * }
     */
    public static int FreeImage_ZLibCRC32(int crc, MemorySegment source, int source_size) {
        var mh$ = FreeImage_ZLibCRC32.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ZLibCRC32", crc, source, source_size);
            }
            return (int)mh$.invokeExact(crc, source, source_size);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CreateTag {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER    );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CreateTag");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CreateTag()
     * }
     */
    public static FunctionDescriptor FreeImage_CreateTag$descriptor() {
        return FreeImage_CreateTag.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CreateTag()
     * }
     */
    public static MethodHandle FreeImage_CreateTag$handle() {
        return FreeImage_CreateTag.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CreateTag()
     * }
     */
    public static MemorySegment FreeImage_CreateTag$address() {
        return FreeImage_CreateTag.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FITAG *FreeImage_CreateTag()
     * }
     */
    public static MemorySegment FreeImage_CreateTag() {
        var mh$ = FreeImage_CreateTag.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CreateTag");
            }
            return (MemorySegment)mh$.invokeExact();
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_DeleteTag {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_DeleteTag");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_DeleteTag(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_DeleteTag$descriptor() {
        return FreeImage_DeleteTag.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_DeleteTag(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_DeleteTag$handle() {
        return FreeImage_DeleteTag.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_DeleteTag(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_DeleteTag$address() {
        return FreeImage_DeleteTag.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_DeleteTag(FITAG *tag)
     * }
     */
    public static void FreeImage_DeleteTag(MemorySegment tag) {
        var mh$ = FreeImage_DeleteTag.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_DeleteTag", tag);
            }
            mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CloneTag {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CloneTag");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CloneTag(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_CloneTag$descriptor() {
        return FreeImage_CloneTag.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CloneTag(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_CloneTag$handle() {
        return FreeImage_CloneTag.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FITAG *FreeImage_CloneTag(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_CloneTag$address() {
        return FreeImage_CloneTag.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FITAG *FreeImage_CloneTag(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_CloneTag(MemorySegment tag) {
        var mh$ = FreeImage_CloneTag.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CloneTag", tag);
            }
            return (MemorySegment)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagKey {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagKey");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagKey(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagKey$descriptor() {
        return FreeImage_GetTagKey.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagKey(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagKey$handle() {
        return FreeImage_GetTagKey.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagKey(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagKey$address() {
        return FreeImage_GetTagKey.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetTagKey(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagKey(MemorySegment tag) {
        var mh$ = FreeImage_GetTagKey.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagKey", tag);
            }
            return (MemorySegment)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagDescription {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagDescription");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagDescription(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagDescription$descriptor() {
        return FreeImage_GetTagDescription.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagDescription(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagDescription$handle() {
        return FreeImage_GetTagDescription.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_GetTagDescription(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagDescription$address() {
        return FreeImage_GetTagDescription.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_GetTagDescription(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagDescription(MemorySegment tag) {
        var mh$ = FreeImage_GetTagDescription.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagDescription", tag);
            }
            return (MemorySegment)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagID {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_SHORT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagID");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * WORD FreeImage_GetTagID(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagID$descriptor() {
        return FreeImage_GetTagID.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * WORD FreeImage_GetTagID(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagID$handle() {
        return FreeImage_GetTagID.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * WORD FreeImage_GetTagID(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagID$address() {
        return FreeImage_GetTagID.ADDR;
    }

    /**
     * {@snippet lang=c :
     * WORD FreeImage_GetTagID(FITAG *tag)
     * }
     */
    public static short FreeImage_GetTagID(MemorySegment tag) {
        var mh$ = FreeImage_GetTagID.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagID", tag);
            }
            return (short)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FREE_IMAGE_MDTYPE FreeImage_GetTagType(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagType$descriptor() {
        return FreeImage_GetTagType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FREE_IMAGE_MDTYPE FreeImage_GetTagType(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagType$handle() {
        return FreeImage_GetTagType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FREE_IMAGE_MDTYPE FreeImage_GetTagType(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagType$address() {
        return FreeImage_GetTagType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FREE_IMAGE_MDTYPE FreeImage_GetTagType(FITAG *tag)
     * }
     */
    public static int FreeImage_GetTagType(MemorySegment tag) {
        var mh$ = FreeImage_GetTagType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagType", tag);
            }
            return (int)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagCount(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagCount$descriptor() {
        return FreeImage_GetTagCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagCount(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagCount$handle() {
        return FreeImage_GetTagCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagCount(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagCount$address() {
        return FreeImage_GetTagCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagCount(FITAG *tag)
     * }
     */
    public static int FreeImage_GetTagCount(MemorySegment tag) {
        var mh$ = FreeImage_GetTagCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagCount", tag);
            }
            return (int)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagLength {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagLength");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagLength(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagLength$descriptor() {
        return FreeImage_GetTagLength.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagLength(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagLength$handle() {
        return FreeImage_GetTagLength.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagLength(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagLength$address() {
        return FreeImage_GetTagLength.ADDR;
    }

    /**
     * {@snippet lang=c :
     * DWORD FreeImage_GetTagLength(FITAG *tag)
     * }
     */
    public static int FreeImage_GetTagLength(MemorySegment tag) {
        var mh$ = FreeImage_GetTagLength.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagLength", tag);
            }
            return (int)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetTagValue {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetTagValue");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const void *FreeImage_GetTagValue(FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetTagValue$descriptor() {
        return FreeImage_GetTagValue.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const void *FreeImage_GetTagValue(FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_GetTagValue$handle() {
        return FreeImage_GetTagValue.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const void *FreeImage_GetTagValue(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagValue$address() {
        return FreeImage_GetTagValue.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const void *FreeImage_GetTagValue(FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_GetTagValue(MemorySegment tag) {
        var mh$ = FreeImage_GetTagValue.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetTagValue", tag);
            }
            return (MemorySegment)mh$.invokeExact(tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagKey {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagKey");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagKey(FITAG *tag, const char *key)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagKey$descriptor() {
        return FreeImage_SetTagKey.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagKey(FITAG *tag, const char *key)
     * }
     */
    public static MethodHandle FreeImage_SetTagKey$handle() {
        return FreeImage_SetTagKey.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagKey(FITAG *tag, const char *key)
     * }
     */
    public static MemorySegment FreeImage_SetTagKey$address() {
        return FreeImage_SetTagKey.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagKey(FITAG *tag, const char *key)
     * }
     */
    public static int FreeImage_SetTagKey(MemorySegment tag, MemorySegment key) {
        var mh$ = FreeImage_SetTagKey.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagKey", tag, key);
            }
            return (int)mh$.invokeExact(tag, key);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagDescription {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagDescription");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagDescription(FITAG *tag, const char *description)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagDescription$descriptor() {
        return FreeImage_SetTagDescription.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagDescription(FITAG *tag, const char *description)
     * }
     */
    public static MethodHandle FreeImage_SetTagDescription$handle() {
        return FreeImage_SetTagDescription.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagDescription(FITAG *tag, const char *description)
     * }
     */
    public static MemorySegment FreeImage_SetTagDescription$address() {
        return FreeImage_SetTagDescription.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagDescription(FITAG *tag, const char *description)
     * }
     */
    public static int FreeImage_SetTagDescription(MemorySegment tag, MemorySegment description) {
        var mh$ = FreeImage_SetTagDescription.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagDescription", tag, description);
            }
            return (int)mh$.invokeExact(tag, description);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagID {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_SHORT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagID");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagID(FITAG *tag, WORD id)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagID$descriptor() {
        return FreeImage_SetTagID.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagID(FITAG *tag, WORD id)
     * }
     */
    public static MethodHandle FreeImage_SetTagID$handle() {
        return FreeImage_SetTagID.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagID(FITAG *tag, WORD id)
     * }
     */
    public static MemorySegment FreeImage_SetTagID$address() {
        return FreeImage_SetTagID.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagID(FITAG *tag, WORD id)
     * }
     */
    public static int FreeImage_SetTagID(MemorySegment tag, short id) {
        var mh$ = FreeImage_SetTagID.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagID", tag, id);
            }
            return (int)mh$.invokeExact(tag, id);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagType {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagType");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagType$descriptor() {
        return FreeImage_SetTagType.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type)
     * }
     */
    public static MethodHandle FreeImage_SetTagType$handle() {
        return FreeImage_SetTagType.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type)
     * }
     */
    public static MemorySegment FreeImage_SetTagType$address() {
        return FreeImage_SetTagType.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagType(FITAG *tag, FREE_IMAGE_MDTYPE type)
     * }
     */
    public static int FreeImage_SetTagType(MemorySegment tag, int type) {
        var mh$ = FreeImage_SetTagType.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagType", tag, type);
            }
            return (int)mh$.invokeExact(tag, type);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagCount(FITAG *tag, DWORD count)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagCount$descriptor() {
        return FreeImage_SetTagCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagCount(FITAG *tag, DWORD count)
     * }
     */
    public static MethodHandle FreeImage_SetTagCount$handle() {
        return FreeImage_SetTagCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagCount(FITAG *tag, DWORD count)
     * }
     */
    public static MemorySegment FreeImage_SetTagCount$address() {
        return FreeImage_SetTagCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagCount(FITAG *tag, DWORD count)
     * }
     */
    public static int FreeImage_SetTagCount(MemorySegment tag, int count) {
        var mh$ = FreeImage_SetTagCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagCount", tag, count);
            }
            return (int)mh$.invokeExact(tag, count);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagLength {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagLength");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagLength(FITAG *tag, DWORD length)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagLength$descriptor() {
        return FreeImage_SetTagLength.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagLength(FITAG *tag, DWORD length)
     * }
     */
    public static MethodHandle FreeImage_SetTagLength$handle() {
        return FreeImage_SetTagLength.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagLength(FITAG *tag, DWORD length)
     * }
     */
    public static MemorySegment FreeImage_SetTagLength$address() {
        return FreeImage_SetTagLength.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagLength(FITAG *tag, DWORD length)
     * }
     */
    public static int FreeImage_SetTagLength(MemorySegment tag, int length) {
        var mh$ = FreeImage_SetTagLength.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagLength", tag, length);
            }
            return (int)mh$.invokeExact(tag, length);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetTagValue {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetTagValue");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagValue(FITAG *tag, const void *value)
     * }
     */
    public static FunctionDescriptor FreeImage_SetTagValue$descriptor() {
        return FreeImage_SetTagValue.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagValue(FITAG *tag, const void *value)
     * }
     */
    public static MethodHandle FreeImage_SetTagValue$handle() {
        return FreeImage_SetTagValue.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagValue(FITAG *tag, const void *value)
     * }
     */
    public static MemorySegment FreeImage_SetTagValue$address() {
        return FreeImage_SetTagValue.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetTagValue(FITAG *tag, const void *value)
     * }
     */
    public static int FreeImage_SetTagValue(MemorySegment tag, MemorySegment value) {
        var mh$ = FreeImage_SetTagValue.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetTagValue", tag, value);
            }
            return (int)mh$.invokeExact(tag, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FindFirstMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FindFirstMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIMETADATA *FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag)
     * }
     */
    public static FunctionDescriptor FreeImage_FindFirstMetadata$descriptor() {
        return FreeImage_FindFirstMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIMETADATA *FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag)
     * }
     */
    public static MethodHandle FreeImage_FindFirstMetadata$handle() {
        return FreeImage_FindFirstMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIMETADATA *FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag)
     * }
     */
    public static MemorySegment FreeImage_FindFirstMetadata$address() {
        return FreeImage_FindFirstMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIMETADATA *FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag)
     * }
     */
    public static MemorySegment FreeImage_FindFirstMetadata(int model, MemorySegment dib, MemorySegment tag) {
        var mh$ = FreeImage_FindFirstMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FindFirstMetadata", model, dib, tag);
            }
            return (MemorySegment)mh$.invokeExact(model, dib, tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FindNextMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FindNextMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag)
     * }
     */
    public static FunctionDescriptor FreeImage_FindNextMetadata$descriptor() {
        return FreeImage_FindNextMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag)
     * }
     */
    public static MethodHandle FreeImage_FindNextMetadata$handle() {
        return FreeImage_FindNextMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag)
     * }
     */
    public static MemorySegment FreeImage_FindNextMetadata$address() {
        return FreeImage_FindNextMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag)
     * }
     */
    public static int FreeImage_FindNextMetadata(MemorySegment mdhandle, MemorySegment tag) {
        var mh$ = FreeImage_FindNextMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FindNextMetadata", mdhandle, tag);
            }
            return (int)mh$.invokeExact(mdhandle, tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FindCloseMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FindCloseMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * void FreeImage_FindCloseMetadata(FIMETADATA *mdhandle)
     * }
     */
    public static FunctionDescriptor FreeImage_FindCloseMetadata$descriptor() {
        return FreeImage_FindCloseMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * void FreeImage_FindCloseMetadata(FIMETADATA *mdhandle)
     * }
     */
    public static MethodHandle FreeImage_FindCloseMetadata$handle() {
        return FreeImage_FindCloseMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * void FreeImage_FindCloseMetadata(FIMETADATA *mdhandle)
     * }
     */
    public static MemorySegment FreeImage_FindCloseMetadata$address() {
        return FreeImage_FindCloseMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * void FreeImage_FindCloseMetadata(FIMETADATA *mdhandle)
     * }
     */
    public static void FreeImage_FindCloseMetadata(MemorySegment mdhandle) {
        var mh$ = FreeImage_FindCloseMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FindCloseMetadata", mdhandle);
            }
            mh$.invokeExact(mdhandle);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag)
     * }
     */
    public static FunctionDescriptor FreeImage_SetMetadata$descriptor() {
        return FreeImage_SetMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag)
     * }
     */
    public static MethodHandle FreeImage_SetMetadata$handle() {
        return FreeImage_SetMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag)
     * }
     */
    public static MemorySegment FreeImage_SetMetadata$address() {
        return FreeImage_SetMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag)
     * }
     */
    public static int FreeImage_SetMetadata(int model, MemorySegment dib, MemorySegment key, MemorySegment tag) {
        var mh$ = FreeImage_SetMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetMetadata", model, dib, key, tag);
            }
            return (int)mh$.invokeExact(model, dib, key, tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag)
     * }
     */
    public static FunctionDescriptor FreeImage_GetMetadata$descriptor() {
        return FreeImage_GetMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag)
     * }
     */
    public static MethodHandle FreeImage_GetMetadata$handle() {
        return FreeImage_GetMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag)
     * }
     */
    public static MemorySegment FreeImage_GetMetadata$address() {
        return FreeImage_GetMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag)
     * }
     */
    public static int FreeImage_GetMetadata(int model, MemorySegment dib, MemorySegment key, MemorySegment tag) {
        var mh$ = FreeImage_GetMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetMetadata", model, dib, key, tag);
            }
            return (int)mh$.invokeExact(model, dib, key, tag);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetMetadataKeyValue {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetMetadataKeyValue");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value)
     * }
     */
    public static FunctionDescriptor FreeImage_SetMetadataKeyValue$descriptor() {
        return FreeImage_SetMetadataKeyValue.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value)
     * }
     */
    public static MethodHandle FreeImage_SetMetadataKeyValue$handle() {
        return FreeImage_SetMetadataKeyValue.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value)
     * }
     */
    public static MemorySegment FreeImage_SetMetadataKeyValue$address() {
        return FreeImage_SetMetadataKeyValue.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetMetadataKeyValue(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, const char *value)
     * }
     */
    public static int FreeImage_SetMetadataKeyValue(int model, MemorySegment dib, MemorySegment key, MemorySegment value) {
        var mh$ = FreeImage_SetMetadataKeyValue.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetMetadataKeyValue", model, dib, key, value);
            }
            return (int)mh$.invokeExact(model, dib, key, value);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetMetadataCount {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetMetadataCount");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_GetMetadataCount$descriptor() {
        return FreeImage_GetMetadataCount.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_GetMetadataCount$handle() {
        return FreeImage_GetMetadataCount.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_GetMetadataCount$address() {
        return FreeImage_GetMetadataCount.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib)
     * }
     */
    public static int FreeImage_GetMetadataCount(int model, MemorySegment dib) {
        var mh$ = FreeImage_GetMetadataCount.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetMetadataCount", model, dib);
            }
            return (int)mh$.invokeExact(model, dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CloneMetadata {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CloneMetadata");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src)
     * }
     */
    public static FunctionDescriptor FreeImage_CloneMetadata$descriptor() {
        return FreeImage_CloneMetadata.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src)
     * }
     */
    public static MethodHandle FreeImage_CloneMetadata$handle() {
        return FreeImage_CloneMetadata.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src)
     * }
     */
    public static MemorySegment FreeImage_CloneMetadata$address() {
        return FreeImage_CloneMetadata.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_CloneMetadata(FIBITMAP *dst, FIBITMAP *src)
     * }
     */
    public static int FreeImage_CloneMetadata(MemorySegment dst, MemorySegment src) {
        var mh$ = FreeImage_CloneMetadata.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CloneMetadata", dst, src);
            }
            return (int)mh$.invokeExact(dst, src);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_TagToString {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_TagToString");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * const char *FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make)
     * }
     */
    public static FunctionDescriptor FreeImage_TagToString$descriptor() {
        return FreeImage_TagToString.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * const char *FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make)
     * }
     */
    public static MethodHandle FreeImage_TagToString$handle() {
        return FreeImage_TagToString.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * const char *FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make)
     * }
     */
    public static MemorySegment FreeImage_TagToString$address() {
        return FreeImage_TagToString.ADDR;
    }

    /**
     * {@snippet lang=c :
     * const char *FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make)
     * }
     */
    public static MemorySegment FreeImage_TagToString(int model, MemorySegment tag, MemorySegment Make) {
        var mh$ = FreeImage_TagToString.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_TagToString", model, tag, Make);
            }
            return (MemorySegment)mh$.invokeExact(model, tag, Make);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransform {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransform");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransform$descriptor() {
        return FreeImage_JPEGTransform.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransform$handle() {
        return FreeImage_JPEGTransform.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransform$address() {
        return FreeImage_JPEGTransform.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransform(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransform(MemorySegment src_file, MemorySegment dst_file, int operation, int perfect) {
        var mh$ = FreeImage_JPEGTransform.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransform", src_file, dst_file, operation, perfect);
            }
            return (int)mh$.invokeExact(src_file, dst_file, operation, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransformU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransformU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransformU$descriptor() {
        return FreeImage_JPEGTransformU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransformU$handle() {
        return FreeImage_JPEGTransformU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransformU$address() {
        return FreeImage_JPEGTransformU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransformU(MemorySegment src_file, MemorySegment dst_file, int operation, int perfect) {
        var mh$ = FreeImage_JPEGTransformU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransformU", src_file, dst_file, operation, perfect);
            }
            return (int)mh$.invokeExact(src_file, dst_file, operation, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGCrop {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGCrop");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGCrop$descriptor() {
        return FreeImage_JPEGCrop.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static MethodHandle FreeImage_JPEGCrop$handle() {
        return FreeImage_JPEGCrop.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static MemorySegment FreeImage_JPEGCrop$address() {
        return FreeImage_JPEGCrop.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCrop(const char *src_file, const char *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static int FreeImage_JPEGCrop(MemorySegment src_file, MemorySegment dst_file, int left, int top, int right, int bottom) {
        var mh$ = FreeImage_JPEGCrop.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGCrop", src_file, dst_file, left, top, right, bottom);
            }
            return (int)mh$.invokeExact(src_file, dst_file, left, top, right, bottom);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGCropU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGCropU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGCropU$descriptor() {
        return FreeImage_JPEGCropU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static MethodHandle FreeImage_JPEGCropU$handle() {
        return FreeImage_JPEGCropU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static MemorySegment FreeImage_JPEGCropU$address() {
        return FreeImage_JPEGCropU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGCropU(const wchar_t *src_file, const wchar_t *dst_file, int left, int top, int right, int bottom)
     * }
     */
    public static int FreeImage_JPEGCropU(MemorySegment src_file, MemorySegment dst_file, int left, int top, int right, int bottom) {
        var mh$ = FreeImage_JPEGCropU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGCropU", src_file, dst_file, left, top, right, bottom);
            }
            return (int)mh$.invokeExact(src_file, dst_file, left, top, right, bottom);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransformFromHandle {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransformFromHandle");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformFromHandle(FreeImageIO *src_io, fi_handle src_handle, FreeImageIO *dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransformFromHandle$descriptor() {
        return FreeImage_JPEGTransformFromHandle.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformFromHandle(FreeImageIO *src_io, fi_handle src_handle, FreeImageIO *dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransformFromHandle$handle() {
        return FreeImage_JPEGTransformFromHandle.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformFromHandle(FreeImageIO *src_io, fi_handle src_handle, FreeImageIO *dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransformFromHandle$address() {
        return FreeImage_JPEGTransformFromHandle.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformFromHandle(FreeImageIO *src_io, fi_handle src_handle, FreeImageIO *dst_io, fi_handle dst_handle, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransformFromHandle(MemorySegment src_io, MemorySegment src_handle, MemorySegment dst_io, MemorySegment dst_handle, int operation, MemorySegment left, MemorySegment top, MemorySegment right, MemorySegment bottom, int perfect) {
        var mh$ = FreeImage_JPEGTransformFromHandle.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransformFromHandle", src_io, src_handle, dst_io, dst_handle, operation, left, top, right, bottom, perfect);
            }
            return (int)mh$.invokeExact(src_io, src_handle, dst_io, dst_handle, operation, left, top, right, bottom, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransformCombined {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransformCombined");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransformCombined$descriptor() {
        return FreeImage_JPEGTransformCombined.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransformCombined$handle() {
        return FreeImage_JPEGTransformCombined.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransformCombined$address() {
        return FreeImage_JPEGTransformCombined.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombined(const char *src_file, const char *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransformCombined(MemorySegment src_file, MemorySegment dst_file, int operation, MemorySegment left, MemorySegment top, MemorySegment right, MemorySegment bottom, int perfect) {
        var mh$ = FreeImage_JPEGTransformCombined.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransformCombined", src_file, dst_file, operation, left, top, right, bottom, perfect);
            }
            return (int)mh$.invokeExact(src_file, dst_file, operation, left, top, right, bottom, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransformCombinedU {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransformCombinedU");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransformCombinedU$descriptor() {
        return FreeImage_JPEGTransformCombinedU.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransformCombinedU$handle() {
        return FreeImage_JPEGTransformCombinedU.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransformCombinedU$address() {
        return FreeImage_JPEGTransformCombinedU.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedU(const wchar_t *src_file, const wchar_t *dst_file, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransformCombinedU(MemorySegment src_file, MemorySegment dst_file, int operation, MemorySegment left, MemorySegment top, MemorySegment right, MemorySegment bottom, int perfect) {
        var mh$ = FreeImage_JPEGTransformCombinedU.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransformCombinedU", src_file, dst_file, operation, left, top, right, bottom, perfect);
            }
            return (int)mh$.invokeExact(src_file, dst_file, operation, left, top, right, bottom, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_JPEGTransformCombinedFromMemory {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_JPEGTransformCombinedFromMemory");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY *src_stream, FIMEMORY *dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static FunctionDescriptor FreeImage_JPEGTransformCombinedFromMemory$descriptor() {
        return FreeImage_JPEGTransformCombinedFromMemory.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY *src_stream, FIMEMORY *dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MethodHandle FreeImage_JPEGTransformCombinedFromMemory$handle() {
        return FreeImage_JPEGTransformCombinedFromMemory.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY *src_stream, FIMEMORY *dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static MemorySegment FreeImage_JPEGTransformCombinedFromMemory$address() {
        return FreeImage_JPEGTransformCombinedFromMemory.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_JPEGTransformCombinedFromMemory(FIMEMORY *src_stream, FIMEMORY *dst_stream, FREE_IMAGE_JPEG_OPERATION operation, int *left, int *top, int *right, int *bottom, BOOL perfect)
     * }
     */
    public static int FreeImage_JPEGTransformCombinedFromMemory(MemorySegment src_stream, MemorySegment dst_stream, int operation, MemorySegment left, MemorySegment top, MemorySegment right, MemorySegment bottom, int perfect) {
        var mh$ = FreeImage_JPEGTransformCombinedFromMemory.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_JPEGTransformCombinedFromMemory", src_stream, dst_stream, operation, left, top, right, bottom, perfect);
            }
            return (int)mh$.invokeExact(src_stream, dst_stream, operation, left, top, right, bottom, perfect);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Rotate {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Rotate");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor)
     * }
     */
    public static FunctionDescriptor FreeImage_Rotate$descriptor() {
        return FreeImage_Rotate.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor)
     * }
     */
    public static MethodHandle FreeImage_Rotate$handle() {
        return FreeImage_Rotate.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor)
     * }
     */
    public static MemorySegment FreeImage_Rotate$address() {
        return FreeImage_Rotate.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rotate(FIBITMAP *dib, double angle, const void *bkcolor)
     * }
     */
    public static MemorySegment FreeImage_Rotate(MemorySegment dib, double angle, MemorySegment bkcolor) {
        var mh$ = FreeImage_Rotate.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Rotate", dib, angle, bkcolor);
            }
            return (MemorySegment)mh$.invokeExact(dib, angle, bkcolor);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_RotateEx {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_RotateEx");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask)
     * }
     */
    public static FunctionDescriptor FreeImage_RotateEx$descriptor() {
        return FreeImage_RotateEx.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask)
     * }
     */
    public static MethodHandle FreeImage_RotateEx$handle() {
        return FreeImage_RotateEx.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask)
     * }
     */
    public static MemorySegment FreeImage_RotateEx$address() {
        return FreeImage_RotateEx.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask)
     * }
     */
    public static MemorySegment FreeImage_RotateEx(MemorySegment dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, int use_mask) {
        var mh$ = FreeImage_RotateEx.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_RotateEx", dib, angle, x_shift, y_shift, x_origin, y_origin, use_mask);
            }
            return (MemorySegment)mh$.invokeExact(dib, angle, x_shift, y_shift, x_origin, y_origin, use_mask);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FlipHorizontal {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FlipHorizontal");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipHorizontal(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_FlipHorizontal$descriptor() {
        return FreeImage_FlipHorizontal.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipHorizontal(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_FlipHorizontal$handle() {
        return FreeImage_FlipHorizontal.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipHorizontal(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_FlipHorizontal$address() {
        return FreeImage_FlipHorizontal.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FlipHorizontal(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_FlipHorizontal(MemorySegment dib) {
        var mh$ = FreeImage_FlipHorizontal.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FlipHorizontal", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FlipVertical {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FlipVertical");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipVertical(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_FlipVertical$descriptor() {
        return FreeImage_FlipVertical.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipVertical(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_FlipVertical$handle() {
        return FreeImage_FlipVertical.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FlipVertical(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_FlipVertical$address() {
        return FreeImage_FlipVertical.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FlipVertical(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_FlipVertical(MemorySegment dib) {
        var mh$ = FreeImage_FlipVertical.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FlipVertical", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Rescale {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Rescale");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter)
     * }
     */
    public static FunctionDescriptor FreeImage_Rescale$descriptor() {
        return FreeImage_Rescale.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter)
     * }
     */
    public static MethodHandle FreeImage_Rescale$handle() {
        return FreeImage_Rescale.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter)
     * }
     */
    public static MemorySegment FreeImage_Rescale$address() {
        return FreeImage_Rescale.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter)
     * }
     */
    public static MemorySegment FreeImage_Rescale(MemorySegment dib, int dst_width, int dst_height, int filter) {
        var mh$ = FreeImage_Rescale.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Rescale", dib, dst_width, dst_height, filter);
            }
            return (MemorySegment)mh$.invokeExact(dib, dst_width, dst_height, filter);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_MakeThumbnail {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_MakeThumbnail");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert)
     * }
     */
    public static FunctionDescriptor FreeImage_MakeThumbnail$descriptor() {
        return FreeImage_MakeThumbnail.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert)
     * }
     */
    public static MethodHandle FreeImage_MakeThumbnail$handle() {
        return FreeImage_MakeThumbnail.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert)
     * }
     */
    public static MemorySegment FreeImage_MakeThumbnail$address() {
        return FreeImage_MakeThumbnail.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert)
     * }
     */
    public static MemorySegment FreeImage_MakeThumbnail(MemorySegment dib, int max_pixel_size, int convert) {
        var mh$ = FreeImage_MakeThumbnail.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_MakeThumbnail", dib, max_pixel_size, convert);
            }
            return (MemorySegment)mh$.invokeExact(dib, max_pixel_size, convert);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_RescaleRect {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_RescaleRect");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter, unsigned int flags)
     * }
     */
    public static FunctionDescriptor FreeImage_RescaleRect$descriptor() {
        return FreeImage_RescaleRect.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter, unsigned int flags)
     * }
     */
    public static MethodHandle FreeImage_RescaleRect$handle() {
        return FreeImage_RescaleRect.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter, unsigned int flags)
     * }
     */
    public static MemorySegment FreeImage_RescaleRect$address() {
        return FreeImage_RescaleRect.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_RescaleRect(FIBITMAP *dib, int dst_width, int dst_height, int left, int top, int right, int bottom, FREE_IMAGE_FILTER filter, unsigned int flags)
     * }
     */
    public static MemorySegment FreeImage_RescaleRect(MemorySegment dib, int dst_width, int dst_height, int left, int top, int right, int bottom, int filter, int flags) {
        var mh$ = FreeImage_RescaleRect.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_RescaleRect", dib, dst_width, dst_height, left, top, right, bottom, filter, flags);
            }
            return (MemorySegment)mh$.invokeExact(dib, dst_width, dst_height, left, top, right, bottom, filter, flags);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AdjustCurve {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AdjustCurve");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_AdjustCurve$descriptor() {
        return FreeImage_AdjustCurve.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_AdjustCurve$handle() {
        return FreeImage_AdjustCurve.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_AdjustCurve$address() {
        return FreeImage_AdjustCurve.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static int FreeImage_AdjustCurve(MemorySegment dib, MemorySegment LUT, int channel) {
        var mh$ = FreeImage_AdjustCurve.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AdjustCurve", dib, LUT, channel);
            }
            return (int)mh$.invokeExact(dib, LUT, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AdjustGamma {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AdjustGamma");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustGamma(FIBITMAP *dib, double gamma)
     * }
     */
    public static FunctionDescriptor FreeImage_AdjustGamma$descriptor() {
        return FreeImage_AdjustGamma.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustGamma(FIBITMAP *dib, double gamma)
     * }
     */
    public static MethodHandle FreeImage_AdjustGamma$handle() {
        return FreeImage_AdjustGamma.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustGamma(FIBITMAP *dib, double gamma)
     * }
     */
    public static MemorySegment FreeImage_AdjustGamma$address() {
        return FreeImage_AdjustGamma.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustGamma(FIBITMAP *dib, double gamma)
     * }
     */
    public static int FreeImage_AdjustGamma(MemorySegment dib, double gamma) {
        var mh$ = FreeImage_AdjustGamma.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AdjustGamma", dib, gamma);
            }
            return (int)mh$.invokeExact(dib, gamma);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AdjustBrightness {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AdjustBrightness");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage)
     * }
     */
    public static FunctionDescriptor FreeImage_AdjustBrightness$descriptor() {
        return FreeImage_AdjustBrightness.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage)
     * }
     */
    public static MethodHandle FreeImage_AdjustBrightness$handle() {
        return FreeImage_AdjustBrightness.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage)
     * }
     */
    public static MemorySegment FreeImage_AdjustBrightness$address() {
        return FreeImage_AdjustBrightness.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage)
     * }
     */
    public static int FreeImage_AdjustBrightness(MemorySegment dib, double percentage) {
        var mh$ = FreeImage_AdjustBrightness.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AdjustBrightness", dib, percentage);
            }
            return (int)mh$.invokeExact(dib, percentage);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AdjustContrast {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AdjustContrast");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustContrast(FIBITMAP *dib, double percentage)
     * }
     */
    public static FunctionDescriptor FreeImage_AdjustContrast$descriptor() {
        return FreeImage_AdjustContrast.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustContrast(FIBITMAP *dib, double percentage)
     * }
     */
    public static MethodHandle FreeImage_AdjustContrast$handle() {
        return FreeImage_AdjustContrast.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustContrast(FIBITMAP *dib, double percentage)
     * }
     */
    public static MemorySegment FreeImage_AdjustContrast$address() {
        return FreeImage_AdjustContrast.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustContrast(FIBITMAP *dib, double percentage)
     * }
     */
    public static int FreeImage_AdjustContrast(MemorySegment dib, double percentage) {
        var mh$ = FreeImage_AdjustContrast.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AdjustContrast", dib, percentage);
            }
            return (int)mh$.invokeExact(dib, percentage);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Invert {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Invert");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_Invert(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_Invert$descriptor() {
        return FreeImage_Invert.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_Invert(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_Invert$handle() {
        return FreeImage_Invert.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_Invert(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_Invert$address() {
        return FreeImage_Invert.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_Invert(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_Invert(MemorySegment dib) {
        var mh$ = FreeImage_Invert.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Invert", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetHistogram {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetHistogram");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_GetHistogram$descriptor() {
        return FreeImage_GetHistogram.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_GetHistogram$handle() {
        return FreeImage_GetHistogram.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_GetHistogram$address() {
        return FreeImage_GetHistogram.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static int FreeImage_GetHistogram(MemorySegment dib, MemorySegment histo, int channel) {
        var mh$ = FreeImage_GetHistogram.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetHistogram", dib, histo, channel);
            }
            return (int)mh$.invokeExact(dib, histo, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetAdjustColorsLookupTable {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetAdjustColorsLookupTable");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * int FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static FunctionDescriptor FreeImage_GetAdjustColorsLookupTable$descriptor() {
        return FreeImage_GetAdjustColorsLookupTable.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * int FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static MethodHandle FreeImage_GetAdjustColorsLookupTable$handle() {
        return FreeImage_GetAdjustColorsLookupTable.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * int FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static MemorySegment FreeImage_GetAdjustColorsLookupTable$address() {
        return FreeImage_GetAdjustColorsLookupTable.ADDR;
    }

    /**
     * {@snippet lang=c :
     * int FreeImage_GetAdjustColorsLookupTable(BYTE *LUT, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static int FreeImage_GetAdjustColorsLookupTable(MemorySegment LUT, double brightness, double contrast, double gamma, int invert) {
        var mh$ = FreeImage_GetAdjustColorsLookupTable.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetAdjustColorsLookupTable", LUT, brightness, contrast, gamma, invert);
            }
            return (int)mh$.invokeExact(LUT, brightness, contrast, gamma, invert);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AdjustColors {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_DOUBLE,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AdjustColors");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static FunctionDescriptor FreeImage_AdjustColors$descriptor() {
        return FreeImage_AdjustColors.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static MethodHandle FreeImage_AdjustColors$handle() {
        return FreeImage_AdjustColors.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static MemorySegment FreeImage_AdjustColors$address() {
        return FreeImage_AdjustColors.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_AdjustColors(FIBITMAP *dib, double brightness, double contrast, double gamma, BOOL invert)
     * }
     */
    public static int FreeImage_AdjustColors(MemorySegment dib, double brightness, double contrast, double gamma, int invert) {
        var mh$ = FreeImage_AdjustColors.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AdjustColors", dib, brightness, contrast, gamma, invert);
            }
            return (int)mh$.invokeExact(dib, brightness, contrast, gamma, invert);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ApplyColorMapping {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ApplyColorMapping");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned int count, BOOL ignore_alpha, BOOL swap)
     * }
     */
    public static FunctionDescriptor FreeImage_ApplyColorMapping$descriptor() {
        return FreeImage_ApplyColorMapping.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned int count, BOOL ignore_alpha, BOOL swap)
     * }
     */
    public static MethodHandle FreeImage_ApplyColorMapping$handle() {
        return FreeImage_ApplyColorMapping.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned int count, BOOL ignore_alpha, BOOL swap)
     * }
     */
    public static MemorySegment FreeImage_ApplyColorMapping$address() {
        return FreeImage_ApplyColorMapping.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyColorMapping(FIBITMAP *dib, RGBQUAD *srccolors, RGBQUAD *dstcolors, unsigned int count, BOOL ignore_alpha, BOOL swap)
     * }
     */
    public static int FreeImage_ApplyColorMapping(MemorySegment dib, MemorySegment srccolors, MemorySegment dstcolors, int count, int ignore_alpha, int swap) {
        var mh$ = FreeImage_ApplyColorMapping.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ApplyColorMapping", dib, srccolors, dstcolors, count, ignore_alpha, swap);
            }
            return (int)mh$.invokeExact(dib, srccolors, dstcolors, count, ignore_alpha, swap);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SwapColors {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SwapColors");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha)
     * }
     */
    public static FunctionDescriptor FreeImage_SwapColors$descriptor() {
        return FreeImage_SwapColors.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha)
     * }
     */
    public static MethodHandle FreeImage_SwapColors$handle() {
        return FreeImage_SwapColors.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha)
     * }
     */
    public static MemorySegment FreeImage_SwapColors$address() {
        return FreeImage_SwapColors.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapColors(FIBITMAP *dib, RGBQUAD *color_a, RGBQUAD *color_b, BOOL ignore_alpha)
     * }
     */
    public static int FreeImage_SwapColors(MemorySegment dib, MemorySegment color_a, MemorySegment color_b, int ignore_alpha) {
        var mh$ = FreeImage_SwapColors.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SwapColors", dib, color_a, color_b, ignore_alpha);
            }
            return (int)mh$.invokeExact(dib, color_a, color_b, ignore_alpha);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_ApplyPaletteIndexMapping {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_ApplyPaletteIndexMapping");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned int count, BOOL swap)
     * }
     */
    public static FunctionDescriptor FreeImage_ApplyPaletteIndexMapping$descriptor() {
        return FreeImage_ApplyPaletteIndexMapping.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned int count, BOOL swap)
     * }
     */
    public static MethodHandle FreeImage_ApplyPaletteIndexMapping$handle() {
        return FreeImage_ApplyPaletteIndexMapping.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned int count, BOOL swap)
     * }
     */
    public static MemorySegment FreeImage_ApplyPaletteIndexMapping$address() {
        return FreeImage_ApplyPaletteIndexMapping.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_ApplyPaletteIndexMapping(FIBITMAP *dib, BYTE *srcindices, BYTE *dstindices, unsigned int count, BOOL swap)
     * }
     */
    public static int FreeImage_ApplyPaletteIndexMapping(MemorySegment dib, MemorySegment srcindices, MemorySegment dstindices, int count, int swap) {
        var mh$ = FreeImage_ApplyPaletteIndexMapping.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_ApplyPaletteIndexMapping", dib, srcindices, dstindices, count, swap);
            }
            return (int)mh$.invokeExact(dib, srcindices, dstindices, count, swap);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SwapPaletteIndices {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SwapPaletteIndices");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b)
     * }
     */
    public static FunctionDescriptor FreeImage_SwapPaletteIndices$descriptor() {
        return FreeImage_SwapPaletteIndices.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b)
     * }
     */
    public static MethodHandle FreeImage_SwapPaletteIndices$handle() {
        return FreeImage_SwapPaletteIndices.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b)
     * }
     */
    public static MemorySegment FreeImage_SwapPaletteIndices$address() {
        return FreeImage_SwapPaletteIndices.ADDR;
    }

    /**
     * {@snippet lang=c :
     * unsigned int FreeImage_SwapPaletteIndices(FIBITMAP *dib, BYTE *index_a, BYTE *index_b)
     * }
     */
    public static int FreeImage_SwapPaletteIndices(MemorySegment dib, MemorySegment index_a, MemorySegment index_b) {
        var mh$ = FreeImage_SwapPaletteIndices.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SwapPaletteIndices", dib, index_a, index_b);
            }
            return (int)mh$.invokeExact(dib, index_a, index_b);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetChannel {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetChannel");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_GetChannel$descriptor() {
        return FreeImage_GetChannel.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_GetChannel$handle() {
        return FreeImage_GetChannel.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_GetChannel$address() {
        return FreeImage_GetChannel.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_GetChannel(MemorySegment dib, int channel) {
        var mh$ = FreeImage_GetChannel.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetChannel", dib, channel);
            }
            return (MemorySegment)mh$.invokeExact(dib, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetChannel {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetChannel");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_SetChannel$descriptor() {
        return FreeImage_SetChannel.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_SetChannel$handle() {
        return FreeImage_SetChannel.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_SetChannel$address() {
        return FreeImage_SetChannel.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static int FreeImage_SetChannel(MemorySegment dst, MemorySegment src, int channel) {
        var mh$ = FreeImage_SetChannel.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetChannel", dst, src, channel);
            }
            return (int)mh$.invokeExact(dst, src, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_GetComplexChannel {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_GetComplexChannel");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_GetComplexChannel$descriptor() {
        return FreeImage_GetComplexChannel.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_GetComplexChannel$handle() {
        return FreeImage_GetComplexChannel.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_GetComplexChannel$address() {
        return FreeImage_GetComplexChannel.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_GetComplexChannel(MemorySegment src, int channel) {
        var mh$ = FreeImage_GetComplexChannel.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_GetComplexChannel", src, channel);
            }
            return (MemorySegment)mh$.invokeExact(src, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_SetComplexChannel {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_SetComplexChannel");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static FunctionDescriptor FreeImage_SetComplexChannel$descriptor() {
        return FreeImage_SetComplexChannel.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MethodHandle FreeImage_SetComplexChannel$handle() {
        return FreeImage_SetComplexChannel.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static MemorySegment FreeImage_SetComplexChannel$address() {
        return FreeImage_SetComplexChannel.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel)
     * }
     */
    public static int FreeImage_SetComplexChannel(MemorySegment dst, MemorySegment src, int channel) {
        var mh$ = FreeImage_SetComplexChannel.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_SetComplexChannel", dst, src, channel);
            }
            return (int)mh$.invokeExact(dst, src, channel);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Copy {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Copy");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom)
     * }
     */
    public static FunctionDescriptor FreeImage_Copy$descriptor() {
        return FreeImage_Copy.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom)
     * }
     */
    public static MethodHandle FreeImage_Copy$handle() {
        return FreeImage_Copy.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom)
     * }
     */
    public static MemorySegment FreeImage_Copy$address() {
        return FreeImage_Copy.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom)
     * }
     */
    public static MemorySegment FreeImage_Copy(MemorySegment dib, int left, int top, int right, int bottom) {
        var mh$ = FreeImage_Copy.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Copy", dib, left, top, right, bottom);
            }
            return (MemorySegment)mh$.invokeExact(dib, left, top, right, bottom);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Paste {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Paste");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha)
     * }
     */
    public static FunctionDescriptor FreeImage_Paste$descriptor() {
        return FreeImage_Paste.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha)
     * }
     */
    public static MethodHandle FreeImage_Paste$handle() {
        return FreeImage_Paste.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha)
     * }
     */
    public static MemorySegment FreeImage_Paste$address() {
        return FreeImage_Paste.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha)
     * }
     */
    public static int FreeImage_Paste(MemorySegment dst, MemorySegment src, int left, int top, int alpha) {
        var mh$ = FreeImage_Paste.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Paste", dst, src, left, top, alpha);
            }
            return (int)mh$.invokeExact(dst, src, left, top, alpha);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_CreateView {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_CreateView");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_CreateView(FIBITMAP *dib, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom)
     * }
     */
    public static FunctionDescriptor FreeImage_CreateView$descriptor() {
        return FreeImage_CreateView.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_CreateView(FIBITMAP *dib, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom)
     * }
     */
    public static MethodHandle FreeImage_CreateView$handle() {
        return FreeImage_CreateView.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_CreateView(FIBITMAP *dib, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom)
     * }
     */
    public static MemorySegment FreeImage_CreateView$address() {
        return FreeImage_CreateView.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_CreateView(FIBITMAP *dib, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom)
     * }
     */
    public static MemorySegment FreeImage_CreateView(MemorySegment dib, int left, int top, int right, int bottom) {
        var mh$ = FreeImage_CreateView.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_CreateView", dib, left, top, right, bottom);
            }
            return (MemorySegment)mh$.invokeExact(dib, left, top, right, bottom);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_Composite {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_Composite");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg, RGBQUAD *appBkColor, FIBITMAP *bg)
     * }
     */
    public static FunctionDescriptor FreeImage_Composite$descriptor() {
        return FreeImage_Composite.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg, RGBQUAD *appBkColor, FIBITMAP *bg)
     * }
     */
    public static MethodHandle FreeImage_Composite$handle() {
        return FreeImage_Composite.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg, RGBQUAD *appBkColor, FIBITMAP *bg)
     * }
     */
    public static MemorySegment FreeImage_Composite$address() {
        return FreeImage_Composite.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg, RGBQUAD *appBkColor, FIBITMAP *bg)
     * }
     */
    public static MemorySegment FreeImage_Composite(MemorySegment fg, int useFileBkg, MemorySegment appBkColor, MemorySegment bg) {
        var mh$ = FreeImage_Composite.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_Composite", fg, useFileBkg, appBkColor, bg);
            }
            return (MemorySegment)mh$.invokeExact(fg, useFileBkg, appBkColor, bg);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_PreMultiplyWithAlpha {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_PreMultiplyWithAlpha");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib)
     * }
     */
    public static FunctionDescriptor FreeImage_PreMultiplyWithAlpha$descriptor() {
        return FreeImage_PreMultiplyWithAlpha.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib)
     * }
     */
    public static MethodHandle FreeImage_PreMultiplyWithAlpha$handle() {
        return FreeImage_PreMultiplyWithAlpha.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib)
     * }
     */
    public static MemorySegment FreeImage_PreMultiplyWithAlpha$address() {
        return FreeImage_PreMultiplyWithAlpha.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib)
     * }
     */
    public static int FreeImage_PreMultiplyWithAlpha(MemorySegment dib) {
        var mh$ = FreeImage_PreMultiplyWithAlpha.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_PreMultiplyWithAlpha", dib);
            }
            return (int)mh$.invokeExact(dib);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_FillBackground {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_FillBackground");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * BOOL FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options)
     * }
     */
    public static FunctionDescriptor FreeImage_FillBackground$descriptor() {
        return FreeImage_FillBackground.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * BOOL FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options)
     * }
     */
    public static MethodHandle FreeImage_FillBackground$handle() {
        return FreeImage_FillBackground.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * BOOL FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options)
     * }
     */
    public static MemorySegment FreeImage_FillBackground$address() {
        return FreeImage_FillBackground.ADDR;
    }

    /**
     * {@snippet lang=c :
     * BOOL FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options)
     * }
     */
    public static int FreeImage_FillBackground(MemorySegment dib, MemorySegment color, int options) {
        var mh$ = FreeImage_FillBackground.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_FillBackground", dib, color, options);
            }
            return (int)mh$.invokeExact(dib, color, options);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_EnlargeCanvas {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_EnlargeCanvas");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options)
     * }
     */
    public static FunctionDescriptor FreeImage_EnlargeCanvas$descriptor() {
        return FreeImage_EnlargeCanvas.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options)
     * }
     */
    public static MethodHandle FreeImage_EnlargeCanvas$handle() {
        return FreeImage_EnlargeCanvas.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options)
     * }
     */
    public static MemorySegment FreeImage_EnlargeCanvas$address() {
        return FreeImage_EnlargeCanvas.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options)
     * }
     */
    public static MemorySegment FreeImage_EnlargeCanvas(MemorySegment src, int left, int top, int right, int bottom, MemorySegment color, int options) {
        var mh$ = FreeImage_EnlargeCanvas.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_EnlargeCanvas", src, left, top, right, bottom, color, options);
            }
            return (MemorySegment)mh$.invokeExact(src, left, top, right, bottom, color, options);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AllocateEx {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AllocateEx");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static FunctionDescriptor FreeImage_AllocateEx$descriptor() {
        return FreeImage_AllocateEx.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MethodHandle FreeImage_AllocateEx$handle() {
        return FreeImage_AllocateEx.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateEx$address() {
        return FreeImage_AllocateEx.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateEx(int width, int height, int bpp, const RGBQUAD *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateEx(int width, int height, int bpp, MemorySegment color, int options, MemorySegment palette, int red_mask, int green_mask, int blue_mask) {
        var mh$ = FreeImage_AllocateEx.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AllocateEx", width, height, bpp, color, options, palette, red_mask, green_mask, blue_mask);
            }
            return (MemorySegment)mh$.invokeExact(width, height, bpp, color, options, palette, red_mask, green_mask, blue_mask);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_AllocateExT {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_AllocateExT");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static FunctionDescriptor FreeImage_AllocateExT$descriptor() {
        return FreeImage_AllocateExT.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MethodHandle FreeImage_AllocateExT$handle() {
        return FreeImage_AllocateExT.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateExT$address() {
        return FreeImage_AllocateExT.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_AllocateExT(FREE_IMAGE_TYPE type, int width, int height, int bpp, const void *color, int options, const RGBQUAD *palette, unsigned int red_mask, unsigned int green_mask, unsigned int blue_mask)
     * }
     */
    public static MemorySegment FreeImage_AllocateExT(int type, int width, int height, int bpp, MemorySegment color, int options, MemorySegment palette, int red_mask, int green_mask, int blue_mask) {
        var mh$ = FreeImage_AllocateExT.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_AllocateExT", type, width, height, bpp, color, options, palette, red_mask, green_mask, blue_mask);
            }
            return (MemorySegment)mh$.invokeExact(type, width, height, bpp, color, options, palette, red_mask, green_mask, blue_mask);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }

    private static class FreeImage_MultigridPoissonSolver {
        public static final FunctionDescriptor DESC = FunctionDescriptor.of(
            Libfreeimage.C_POINTER,
            Libfreeimage.C_POINTER,
            Libfreeimage.C_INT
        );

        public static final MemorySegment ADDR = Libfreeimage.findOrThrow("FreeImage_MultigridPoissonSolver");

        public static final MethodHandle HANDLE = Linker.nativeLinker().downcallHandle(ADDR, DESC);
    }

    /**
     * Function descriptor for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle)
     * }
     */
    public static FunctionDescriptor FreeImage_MultigridPoissonSolver$descriptor() {
        return FreeImage_MultigridPoissonSolver.DESC;
    }

    /**
     * Downcall method handle for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle)
     * }
     */
    public static MethodHandle FreeImage_MultigridPoissonSolver$handle() {
        return FreeImage_MultigridPoissonSolver.HANDLE;
    }

    /**
     * Address for:
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle)
     * }
     */
    public static MemorySegment FreeImage_MultigridPoissonSolver$address() {
        return FreeImage_MultigridPoissonSolver.ADDR;
    }

    /**
     * {@snippet lang=c :
     * FIBITMAP *FreeImage_MultigridPoissonSolver(FIBITMAP *Laplacian, int ncycle)
     * }
     */
    public static MemorySegment FreeImage_MultigridPoissonSolver(MemorySegment Laplacian, int ncycle) {
        var mh$ = FreeImage_MultigridPoissonSolver.HANDLE;
        try {
            if (TRACE_DOWNCALLS) {
                traceDowncall("FreeImage_MultigridPoissonSolver", Laplacian, ncycle);
            }
            return (MemorySegment)mh$.invokeExact(Laplacian, ncycle);
        } catch (Throwable ex$) {
           throw new AssertionError("should not reach here", ex$);
        }
    }
    private static final MemorySegment NULL = MemorySegment.ofAddress(0L);
    /**
     * {@snippet lang=c :
     * #define NULL (void*) 0
     * }
     */
    public static MemorySegment NULL() {
        return NULL;
    }
    private static final int FREEIMAGE_COLORORDER = (int)0L;
    /**
     * {@snippet lang=c :
     * #define FREEIMAGE_COLORORDER 0
     * }
     */
    public static int FREEIMAGE_COLORORDER() {
        return FREEIMAGE_COLORORDER;
    }
    private static final int FI_RGBA_ALPHA_MASK = (int)4278190080L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_ALPHA_MASK 4278190080
     * }
     */
    public static int FI_RGBA_ALPHA_MASK() {
        return FI_RGBA_ALPHA_MASK;
    }
    private static final int FI_RGBA_RGB_MASK = (int)16777215L;
    /**
     * {@snippet lang=c :
     * #define FI_RGBA_RGB_MASK 16777215
     * }
     */
    public static int FI_RGBA_RGB_MASK() {
        return FI_RGBA_RGB_MASK;
    }
    private static final int FI_COLOR_PALETTE_SEARCH_MASK = (int)6L;
    /**
     * {@snippet lang=c :
     * #define FI_COLOR_PALETTE_SEARCH_MASK 6
     * }
     */
    public static int FI_COLOR_PALETTE_SEARCH_MASK() {
        return FI_COLOR_PALETTE_SEARCH_MASK;
    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy