Full Code of taptap/perf-doctor for AI

main cd45492d67f7 cached
161 files
4.9 MB
1.3M tokens
2930 symbols
1 requests
Download .txt
Showing preview only (5,178K chars total). Download the full file or copy to clipboard to get everything.
Repository: taptap/perf-doctor
Branch: main
Commit: cd45492d67f7
Files: 161
Total size: 4.9 MB

Directory structure:
gitextract_9g4qj153/

├── .gitignore
├── 3rdparty/
│   └── Cinder-VNM/
│       ├── README.md
│       ├── cinderblock.xml
│       ├── imgui_remote_client/
│       │   ├── imgui/
│       │   │   ├── detector.js
│       │   │   ├── lz4.js
│       │   │   └── main.css
│       │   ├── imgui.html
│       │   └── imgui.js
│       ├── include/
│       │   ├── AnsiToUtf.h
│       │   ├── AssetManager.h
│       │   ├── CaptureHelper.h
│       │   ├── CinderGuizmo.h
│       │   ├── CinderImGui.h
│       │   ├── CinderImGuiExports.h
│       │   ├── CinderRemoteImgui.h
│       │   ├── CubemapRenderer.h
│       │   ├── DearLogger.h
│       │   ├── FontHelper.h
│       │   ├── GLHelper.h
│       │   ├── GlslParamsBuilder.h
│       │   ├── GlslParamsBuilderImgui.h
│       │   ├── LimitSingleInstance.h
│       │   ├── MiniConfig.h
│       │   ├── MiniConfigImgui.h
│       │   ├── MotionHelper.h
│       │   ├── NvOptimusEnablement.h
│       │   ├── OscHelper.h
│       │   ├── SharedMemory.h
│       │   ├── StateMachine.h
│       │   ├── TextureHelper.h
│       │   ├── TuioHelper.h
│       │   └── renderdoc_app.h
│       ├── manually_copy_to_include/
│       │   └── item.def
│       ├── src/
│       │   ├── AssetManager.cpp
│       │   └── MiniConfig.cpp
│       ├── templates/
│       │   ├── DepthSensor VNM/
│       │   │   ├── assets/
│       │   │   │   ├── shader.frag
│       │   │   │   └── shader.vert
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   ├── Melo Scene/
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   ├── Minimalist VNM/
│       │   │   ├── assets/
│       │   │   │   ├── shader.frag
│       │   │   │   └── shader.vert
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   └── NonGame/
│       │       ├── include/
│       │       │   └── item.def
│       │       ├── src/
│       │       │   └── _TBOX_PREFIX_App.cpp
│       │       └── template.xml
│       └── ui/
│           ├── CinderGuizmo.cpp
│           ├── CinderImGui.cpp
│           ├── CinderMarkdown.cpp
│           ├── CinderRemoteImgui.cpp
│           ├── DearLogger.cpp
│           ├── IconFontCppHeaders/
│           │   ├── IconsFontAwesome5.h
│           │   ├── IconsFontAwesome5Pro.h
│           │   ├── IconsFontAwesome5ProBrands.h
│           │   ├── IconsFontaudio.h
│           │   ├── IconsKenney.h
│           │   └── IconsMaterialDesign.h
│           ├── ImGuiColorTextEdit/
│           │   ├── .gitignore
│           │   ├── CONTRIBUTING
│           │   ├── LICENSE
│           │   ├── README.md
│           │   ├── TextEditor.cpp
│           │   └── TextEditor.h
│           ├── ImGuizmo/
│           │   ├── ImGuizmo.cpp
│           │   └── ImGuizmo.h
│           ├── imgui/
│           │   ├── imconfig.h
│           │   ├── imgui.cpp
│           │   ├── imgui.h
│           │   ├── imgui_demo.cpp
│           │   ├── imgui_draw.cpp
│           │   ├── imgui_internal.h
│           │   ├── imgui_tables.cpp
│           │   ├── imgui_widgets.cpp
│           │   ├── imstb_rectpack.h
│           │   ├── imstb_textedit.h
│           │   └── imstb_truetype.h
│           ├── imgui_markdown/
│           │   ├── License.txt
│           │   ├── README.md
│           │   └── imgui_markdown.h
│           ├── imgui_remote/
│           │   ├── imgui_remote.h
│           │   ├── imgui_remote_webby.h
│           │   ├── lz4/
│           │   │   ├── LICENSE
│           │   │   ├── lz4.c
│           │   │   ├── lz4.h
│           │   │   ├── lz4frame.c
│           │   │   ├── lz4frame.h
│           │   │   ├── lz4frame_static.h
│           │   │   ├── lz4hc.c
│           │   │   ├── lz4hc.h
│           │   │   ├── xxhash.c
│           │   │   └── xxhash.h
│           │   └── webby/
│           │       ├── LICENSE
│           │       ├── README.md
│           │       ├── webby.c
│           │       ├── webby.h
│           │       ├── webby_unix.h
│           │       └── webby_win32.h
│           └── implot/
│               ├── LICENSE
│               ├── README.md
│               ├── TODO.md
│               ├── implot.cpp
│               ├── implot.h
│               ├── implot_demo.cpp
│               ├── implot_internal.h
│               └── implot_items.cpp
├── LICENSE
├── README.md
├── _config.yml
├── build.bat
├── deploy.bat
├── doc/
│   ├── README.md
│   ├── android_application_profiling.md
│   ├── android_platform_profiling.md
│   ├── collect_etm_data_for_autofdo.md
│   ├── debug_dwarf_unwinding.md
│   ├── executable_commands_reference.md
│   ├── inferno.md
│   ├── jit_symbols.md
│   ├── sample_filter.md
│   └── scripts_reference.md
├── include/
│   ├── Resources.h
│   └── item.def
├── simpleperf/
│   ├── __init__.py
│   ├── annotate.py
│   ├── api_profiler.py
│   ├── app_profiler.py
│   ├── bin/
│   │   └── android/
│   │       └── arm64/
│   │           └── simpleperf
│   ├── binary_cache_builder.py
│   ├── clean_reports.bat
│   ├── debug_unwind_reporter.py
│   ├── gecko_profile_generator.py
│   ├── pprof_proto_generator.py
│   ├── profile_pb2.py
│   ├── report.py
│   ├── report_firefox.bat
│   ├── report_gui.bat
│   ├── report_html.bat
│   ├── report_html.js
│   ├── report_html.py
│   ├── report_sample.py
│   ├── run.bat
│   ├── run_simpleperf_on_device.py
│   ├── run_simpleperf_without_usb_connection.py
│   ├── simpleperf-help-report.txt
│   ├── simpleperf.bat
│   ├── simpleperf_report_lib.py
│   ├── simpleperf_utils.py
│   └── stackcollapse.py
├── src/
│   ├── LightSpeedApp.cpp
│   ├── LightSpeedApp.gui.cpp
│   └── LightSpeedApp.h
└── vc2019/
    ├── Resources.rc
    ├── perf-doctor.sln
    ├── perf-doctor.vcxproj
    ├── perf-doctor.vcxproj.filters
    └── resource.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app
*.perfetto
*.spec

*.vs
x64/
*.log
Bin/
*.user
/vc2019/*.aps

src/MixDevice.h

perf-doctor-*

================================================
FILE: 3rdparty/Cinder-VNM/README.md
================================================
# Cinder-VNM


================================================
FILE: 3rdparty/Cinder-VNM/cinderblock.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<cinder>
<block
	name="vnm"
	id="org.jing.vnm"
	author="Vinjn Zhang"
	license="MIT"
	summary="Keep it simple and happy"
	core="false"
	>
	<sourcePattern>src/*.*</sourcePattern>
	<headerPattern>include/*.*</headerPattern>
	<includePath>include</includePath>
	<includePath>ui</includePath>
	<includePath>ui/implot</includePath>
	<includePath>../</includePath>
</block>
<template>templates/Melo Scene/template.xml</template>
<template>templates/Minimalist VNM/template.xml</template>
<template>templates/DepthSensor VNM/template.xml</template>
<template>templates/NonGame/template.xml</template>
</cinder>

================================================
FILE: 3rdparty/Cinder-VNM/imgui_remote_client/imgui/detector.js
================================================
/**
 * @author alteredq / http://alteredqualia.com/
 * @author mr.doob / http://mrdoob.com/
 */

var Detector = {

	canvas: !! window.CanvasRenderingContext2D,
	webgl: ( function () { try { var canvas = document.createElement( 'canvas' ); return !! window.WebGLRenderingContext && ( canvas.getContext( 'webgl' ) || canvas.getContext( 'experimental-webgl' ) ); } catch( e ) { return false; } } )(),
	workers: !! window.Worker,
	fileapi: window.File && window.FileReader && window.FileList && window.Blob,

	getWebGLErrorMessage: function () {

		var element = document.createElement( 'div' );
		element.id = 'webgl-error-message';
		element.style.fontFamily = 'monospace';
		element.style.fontSize = '13px';
		element.style.fontWeight = 'normal';
		element.style.textAlign = 'center';
		element.style.background = '#fff';
		element.style.color = '#000';
		element.style.padding = '1.5em';
		element.style.width = '400px';
		element.style.margin = '5em auto 0';

		if ( ! this.webgl ) {

			element.innerHTML = window.WebGLRenderingContext ? [
				'Your graphics card does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">WebGL</a>.<br />',
				'Find out how to get it <a href="http://get.webgl.org/" style="color:#000">here</a>.'
			].join( '\n' ) : [
				'Your browser does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">WebGL</a>.<br/>',
				'Find out how to get it <a href="http://get.webgl.org/" style="color:#000">here</a>.'
			].join( '\n' );

		}

		return element;

	},

	addGetWebGLMessage: function ( parameters ) {

		var parent, id, element;

		parameters = parameters || {};

		parent = parameters.parent !== undefined ? parameters.parent : document.body;
		id = parameters.id !== undefined ? parameters.id : 'oldie';

		element = Detector.getWebGLErrorMessage();
		element.id = id;

		parent.appendChild( element );

	}

};

================================================
FILE: 3rdparty/Cinder-VNM/imgui_remote_client/imgui/lz4.js
================================================
/*! lz4.js v0.1.0 Released under the MIT license. https://github.com/ukyo/lz4.js/LICENSE */
var lz4 = {};
(function() {
    function e(a) {
        throw a;
    }
    var i = void 0,
        l = !0,
        m = null,
        p = !1;

    function q() {
        return function() {}
    }
    var r = {
            TOTAL_MEMORY: 13656760
        },
        aa = {},
        s;
    for (s in r) r.hasOwnProperty(s) && (aa[s] = r[s]);
    var ba = "object" === typeof process && "function" === typeof require,
        ca = "object" === typeof window,
        ea = "function" === typeof importScripts,
        fa = !ca && !ba && !ea;
    if (ba) {
        r.print = function(a) {
            process.stdout.write(a + "\n")
        };
        r.printErr = function(a) {
            process.stderr.write(a + "\n")
        };
        var ga = require("fs"),
            ha = require("path");
        r.read = function(a, b) {
            var a = ha.normalize(a),
                c = ga.readFileSync(a);
            !c && a != ha.resolve(a) && (a = path.join(__dirname, "..", "src", a), c = ga.readFileSync(a));
            c && !b && (c = c.toString());
            return c
        };
        r.readBinary = function(a) {
            return r.read(a, l)
        };
        r.load = function(a) {
            ia(read(a))
        };
        r.arguments = process.argv.slice(2);
        module.exports = r
    } else fa ? (r.print = print, "undefined" != typeof printErr &&
        (r.printErr = printErr), r.read = "undefined" != typeof read ? read : function() {
            e("no read() available (jsc?)")
        }, r.readBinary = function(a) {
            return read(a, "binary")
        }, "undefined" != typeof scriptArgs ? r.arguments = scriptArgs : "undefined" != typeof arguments && (r.arguments = arguments), this.Module = r, eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined")) : ca || ea ? (r.read = function(a) {
            var b = new XMLHttpRequest;
            b.open("GET", a, p);
            b.send(m);
            return b.responseText
        }, "undefined" != typeof arguments &&
        (r.arguments = arguments), "undefined" !== typeof console ? (r.print = function(a) {
            console.log(a)
        }, r.printErr = function(a) {
            console.log(a)
        }) : r.print = q(), ca ? this.Module = r : r.load = importScripts) : e("Unknown runtime environment. Where are we?");

    function ia(a) {
        eval.call(m, a)
    }
    "undefined" == !r.load && r.read && (r.load = function(a) {
        ia(r.read(a))
    });
    r.print || (r.print = q());
    r.printErr || (r.printErr = r.print);
    r.arguments || (r.arguments = []);
    r.print = r.print;
    r.P = r.printErr;
    r.preRun = [];
    r.postRun = [];
    for (s in aa) aa.hasOwnProperty(s) && (r[s] = aa[s]);

    function ja() {
        return u
    }

    function ka(a) {
        u = a
    }

    function la(a) {
        switch (a) {
            case "i1":
            case "i8":
                return 1;
            case "i16":
                return 2;
            case "i32":
                return 4;
            case "i64":
                return 8;
            case "float":
                return 4;
            case "double":
                return 8;
            default:
                return "*" === a[a.length - 1] ? ma : "i" === a[0] ? (a = parseInt(a.substr(1)), w(0 === a % 8), a / 8) : 0
        }
    }

    function na(a, b, c) {
        c && c.length ? (c.splice || (c = Array.prototype.slice.call(c)), c.splice(0, 0, b), r["dynCall_" + a].apply(m, c)) : r["dynCall_" + a].call(m, b)
    }
    var oa;

    function pa() {
        var a = [],
            b = 0;
        this.ea = function(c) {
            c &= 255;
            if (0 == a.length) {
                if (0 == (c & 128)) return String.fromCharCode(c);
                a.push(c);
                b = 192 == (c & 224) ? 1 : 224 == (c & 240) ? 2 : 3;
                return ""
            }
            if (b && (a.push(c), b--, 0 < b)) return "";
            var c = a[0],
                d = a[1],
                f = a[2],
                g = a[3];
            2 == a.length ? c = String.fromCharCode((c & 31) << 6 | d & 63) : 3 == a.length ? c = String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | f & 63) : (c = (c & 7) << 18 | (d & 63) << 12 | (f & 63) << 6 | g & 63, c = String.fromCharCode(Math.floor((c - 65536) / 1024) + 55296, (c - 65536) % 1024 + 56320));
            a.length = 0;
            return c
        };
        this.Sa = function(a) {
            for (var a =
                    unescape(encodeURIComponent(a)), b = [], f = 0; f < a.length; f++) b.push(a.charCodeAt(f));
            return b
        }
    }

    function qa(a) {
        var b = u;
        u = u + a | 0;
        u = u + 7 & -8;
        return b
    }

    function ra(a) {
        var b = x;
        x = x + a | 0;
        x = x + 7 & -8;
        return b
    }

    function ta(a) {
        var b = y;
        y = y + a | 0;
        y = y + 7 & -8;
        y >= ua && B("Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value " + ua + ", or (2) set Module.TOTAL_MEMORY before the program runs.");
        return b
    }

    function va(a, b) {
        return Math.ceil(a / (b ? b : 8)) * (b ? b : 8)
    }
    var ma = 4,
        wa = {},
        xa = p,
        C, ya;

    function w(a, b) {
        a || B("Assertion failed: " + b)
    }
    r.ccall = function(a, b, c, d) {
        return za(Aa(a), b, c, d)
    };

    function Aa(a) {
        try {
            var b = r["_" + a];
            b || (b = eval("_" + a))
        } catch (c) {}
        w(b, "Cannot call unknown function " + a + " (perhaps LLVM optimizations or closure removed it?)");
        return b
    }

    function za(a, b, c, d) {
        function f(a, b) {
            if ("string" == b) {
                if (a === m || a === i || 0 === a) return 0;
                a = D(a);
                b = "array"
            }
            if ("array" == b) {
                g || (g = ja());
                var c = qa(a.length);
                Ba(a, c);
                return c
            }
            return a
        }
        var g = 0,
            h = 0,
            d = d ? d.map(function(a) {
                return f(a, c[h++])
            }) : [];
        a = a.apply(m, d);
        "string" == b ? b = Ca(a) : (w("array" != b), b = a);
        g && ka(g);
        return b
    }
    r.cwrap = function(a, b, c) {
        var d = Aa(a);
        return function() {
            return za(d, b, c, Array.prototype.slice.call(arguments))
        }
    };

    function Da(a, b, c) {
        c = c || "i8";
        "*" === c.charAt(c.length - 1) && (c = "i32");
        switch (c) {
            case "i1":
                F[a] = b;
                break;
            case "i8":
                F[a] = b;
                break;
            case "i16":
                G[a >> 1] = b;
                break;
            case "i32":
                H[a >> 2] = b;
                break;
            case "i64":
                ya = [b >>> 0, (C = b, 1 <= +Ea(C) ? 0 < C ? (Fa(+Ga(C / 4294967296), 4294967295) | 0) >>> 0 : ~~+Ha((C - +(~~C >>> 0)) / 4294967296) >>> 0 : 0)];
                H[a >> 2] = ya[0];
                H[a + 4 >> 2] = ya[1];
                break;
            case "float":
                Ia[a >> 2] = b;
                break;
            case "double":
                Ja[a >> 3] = b;
                break;
            default:
                B("invalid type for setValue: " + c)
        }
    }
    r.setValue = Da;
    r.getValue = function(a, b) {
        b = b || "i8";
        "*" === b.charAt(b.length - 1) && (b = "i32");
        switch (b) {
            case "i1":
                return F[a];
            case "i8":
                return F[a];
            case "i16":
                return G[a >> 1];
            case "i32":
                return H[a >> 2];
            case "i64":
                return H[a >> 2];
            case "float":
                return Ia[a >> 2];
            case "double":
                return Ja[a >> 3];
            default:
                B("invalid type for setValue: " + b)
        }
        return m
    };
    var I = 2,
        Ka = 4;
    r.ALLOC_NORMAL = 0;
    r.ALLOC_STACK = 1;
    r.ALLOC_STATIC = I;
    r.ALLOC_DYNAMIC = 3;
    r.ALLOC_NONE = Ka;

    function K(a, b, c, d) {
        var f, g;
        "number" === typeof a ? (f = l, g = a) : (f = p, g = a.length);
        var h = "string" === typeof b ? b : m,
            c = c == Ka ? d : [L, qa, ra, ta][c === i ? I : c](Math.max(g, h ? 1 : b.length));
        if (f) {
            d = c;
            w(0 == (c & 3));
            for (a = c + (g & -4); d < a; d += 4) H[d >> 2] = 0;
            for (a = c + g; d < a;) F[d++ | 0] = 0;
            return c
        }
        if ("i8" === h) return a.subarray || a.slice ? M.set(a, c) : M.set(new Uint8Array(a), c), c;
        for (var d = 0, k, t; d < g;) {
            var j = a[d];
            "function" === typeof j && (j = wa.ld(j));
            f = h || b[d];
            0 === f ? d++ : ("i64" == f && (f = "i32"), Da(c + d, j, f), t !== f && (k = la(f), t = f), d += k)
        }
        return c
    }
    r.allocate = K;

    function Ca(a, b) {
        for (var c = p, d, f = 0;;) {
            d = M[a + f | 0];
            if (128 <= d) c = l;
            else if (0 == d && !b) break;
            f++;
            if (b && f == b) break
        }
        b || (b = f);
        var g = "";
        if (!c) {
            for (; 0 < b;) d = String.fromCharCode.apply(String, M.subarray(a, a + Math.min(b, 1024))), g = g ? g + d : d, a += 1024, b -= 1024;
            return g
        }
        c = new pa;
        for (f = 0; f < b; f++) d = M[a + f | 0], g += c.ea(d);
        return g
    }
    r.Pointer_stringify = Ca;
    r.UTF16ToString = function(a) {
        for (var b = 0, c = "";;) {
            var d = G[a + 2 * b >> 1];
            if (0 == d) return c;
            ++b;
            c += String.fromCharCode(d)
        }
    };
    r.stringToUTF16 = function(a, b) {
        for (var c = 0; c < a.length; ++c) G[b + 2 * c >> 1] = a.charCodeAt(c);
        G[b + 2 * a.length >> 1] = 0
    };
    r.UTF32ToString = function(a) {
        for (var b = 0, c = "";;) {
            var d = H[a + 4 * b >> 2];
            if (0 == d) return c;
            ++b;
            65536 <= d ? (d -= 65536, c += String.fromCharCode(55296 | d >> 10, 56320 | d & 1023)) : c += String.fromCharCode(d)
        }
    };
    r.stringToUTF32 = function(a, b) {
        for (var c = 0, d = 0; d < a.length; ++d) {
            var f = a.charCodeAt(d);
            if (55296 <= f && 57343 >= f) var g = a.charCodeAt(++d),
                f = 65536 + ((f & 1023) << 10) | g & 1023;
            H[b + 4 * c >> 2] = f;
            ++c
        }
        H[b + 4 * c >> 2] = 0
    };

    function La(a) {
        try {
            "number" === typeof a && (a = Ca(a));
            if ("_" !== a[0] || "_" !== a[1] || "Z" !== a[2]) return a;
            switch (a[3]) {
                case "n":
                    return "operator new()";
                case "d":
                    return "operator delete()"
            }
            var b = 3,
                c = {
                    v: "void",
                    b: "bool",
                    c: "char",
                    s: "short",
                    i: "int",
                    l: "long",
                    f: "float",
                    d: "double",
                    w: "wchar_t",
                    a: "signed char",
                    h: "unsigned char",
                    t: "unsigned short",
                    j: "unsigned int",
                    m: "unsigned long",
                    x: "long long",
                    y: "unsigned long long",
                    z: "..."
                },
                d = [],
                f = l,
                g = function(h, t, j) {
                    var t = t || Infinity,
                        z = "",
                        A = [],
                        n;
                    if ("N" === a[b]) {
                        b++;
                        "K" === a[b] && b++;
                        for (n = [];
                            "E" !== a[b];)
                            if ("S" === a[b]) {
                                b++;
                                var v = a.indexOf("_", b);
                                n.push(d[a.substring(b, v) || 0] || "?");
                                b = v + 1
                            } else if ("C" === a[b]) n.push(n[n.length - 1]), b += 2;
                        else {
                            var v = parseInt(a.substr(b)),
                                E = v.toString().length;
                            if (!v || !E) {
                                b--;
                                break
                            }
                            var da = a.substr(b + E, v);
                            n.push(da);
                            d.push(da);
                            b += E + v
                        }
                        b++;
                        n = n.join("::");
                        t--;
                        if (0 === t) return h ? [n] : n
                    } else if (("K" === a[b] || f && "L" === a[b]) && b++, v = parseInt(a.substr(b))) E = v.toString().length, n = a.substr(b + E, v), b += E + v;
                    f = p;
                    "I" === a[b] ? (b++, v = g(l), E = g(l, 1, l), z += E[0] + " " + n + "<" + v.join(", ") +
                        ">") : z = n;
                    a: for (; b < a.length && 0 < t--;)
                        if (n = a[b++], n in c) A.push(c[n]);
                        else switch (n) {
                            case "P":
                                A.push(g(l, 1, l)[0] + "*");
                                break;
                            case "R":
                                A.push(g(l, 1, l)[0] + "&");
                                break;
                            case "L":
                                b++;
                                v = a.indexOf("E", b) - b;
                                A.push(a.substr(b, v));
                                b += v + 2;
                                break;
                            case "A":
                                v = parseInt(a.substr(b));
                                b += v.toString().length;
                                "_" !== a[b] && e("?");
                                b++;
                                A.push(g(l, 1, l)[0] + " [" + v + "]");
                                break;
                            case "E":
                                break a;
                            default:
                                z += "?" + n;
                                break a
                        }!j && (1 === A.length && "void" === A[0]) && (A = []);
                    return h ? A : z + ("(" + A.join(", ") + ")")
                };
            return g()
        } catch (h) {
            return a
        }
    }

    function Ma() {
        var a = Error().stack;
        return a ? a.replace(/__Z[\w\d_]+/g, function(a) {
            var c = La(a);
            return a === c ? a : a + " [" + c + "]"
        }) : "(no stack trace available)"
    }
    var F, M, G, Na, H, Oa, Ia, Ja, Pa = 0,
        x = 0,
        Qa = 0,
        u = 0,
        Ra = 0,
        Sa = 0,
        y = 0,
        ua = r.TOTAL_MEMORY || 16777216;
    w("undefined" !== typeof Int32Array && "undefined" !== typeof Float64Array && !!(new Int32Array(1)).subarray && !!(new Int32Array(1)).set, "Cannot fallback to non-typed array case: Code is too specialized");
    var N = new ArrayBuffer(ua);
    F = new Int8Array(N);
    G = new Int16Array(N);
    H = new Int32Array(N);
    M = new Uint8Array(N);
    Na = new Uint16Array(N);
    Oa = new Uint32Array(N);
    Ia = new Float32Array(N);
    Ja = new Float64Array(N);
    H[0] = 255;
    w(255 === M[0] && 0 === M[3], "Typed arrays 2 must be run on a little-endian system");
    r.HEAP = i;
    r.HEAP8 = F;
    r.HEAP16 = G;
    r.HEAP32 = H;
    r.HEAPU8 = M;
    r.HEAPU16 = Na;
    r.HEAPU32 = Oa;
    r.HEAPF32 = Ia;
    r.HEAPF64 = Ja;

    function O(a) {
        for (; 0 < a.length;) {
            var b = a.shift();
            if ("function" == typeof b) b();
            else {
                var c = b.J;
                "number" === typeof c ? b.aa === i ? na("v", c) : na("vi", c, [b.aa]) : c(b.aa === i ? m : b.aa)
            }
        }
    }
    var Ta = [],
        P = [],
        Ua = [],
        Va = [],
        Wa = [],
        Xa = p;

    function Ya(a) {
        Ta.unshift(a)
    }
    r.addOnPreRun = r.bd = Ya;
    r.addOnInit = r.Zc = function(a) {
        P.unshift(a)
    };
    r.addOnPreMain = r.ad = function(a) {
        Ua.unshift(a)
    };
    r.addOnExit = r.Yc = function(a) {
        Va.unshift(a)
    };

    function Za(a) {
        Wa.unshift(a)
    }
    r.addOnPostRun = r.$c = Za;

    function D(a, b, c) {
        a = (new pa).Sa(a);
        c && (a.length = c);
        b || a.push(0);
        return a
    }
    r.intArrayFromString = D;
    r.intArrayToString = function(a) {
        for (var b = [], c = 0; c < a.length; c++) {
            var d = a[c];
            255 < d && (d &= 255);
            b.push(String.fromCharCode(d))
        }
        return b.join("")
    };
    r.writeStringToMemory = function(a, b, c) {
        a = D(a, c);
        for (c = 0; c < a.length;) F[b + c | 0] = a[c], c += 1
    };

    function Ba(a, b) {
        for (var c = 0; c < a.length; c++) F[b + c | 0] = a[c]
    }
    r.writeArrayToMemory = Ba;
    r.writeAsciiToMemory = function(a, b, c) {
        for (var d = 0; d < a.length; d++) F[b + d | 0] = a.charCodeAt(d);
        c || (F[b + a.length | 0] = 0)
    };
    Math.imul || (Math.imul = function(a, b) {
        var c = a & 65535,
            d = b & 65535;
        return c * d + ((a >>> 16) * d + c * (b >>> 16) << 16) | 0
    });
    Math.nd = Math.imul;
    var Ea = Math.abs,
        Ha = Math.ceil,
        Ga = Math.floor,
        Fa = Math.min,
        Q = 0,
        $a = m,
        ab = m;

    function bb() {
        Q++;
        r.monitorRunDependencies && r.monitorRunDependencies(Q)
    }
    r.addRunDependency = bb;

    function cb() {
        Q--;
        r.monitorRunDependencies && r.monitorRunDependencies(Q);
        if (0 == Q && ($a !== m && (clearInterval($a), $a = m), ab)) {
            var a = ab;
            ab = m;
            a()
        }
    }
    r.removeRunDependency = cb;
    r.preloadedImages = {};
    r.preloadedAudios = {};
    Pa = 8;
    x = Pa + 528;
    P.push({
        J: function() {
            db()
        }
    });
    K([0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "i8", Ka, 8);
    var eb = va(K(12, "i8", I), 8);
    w(0 == eb % 8);
    r._memset = fb;
    r._memcpy = gb;
    var hb = K([8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0,
        1, 0, 3, 0, 1, 0, 2, 0, 1, 0
    ], "i8", I);
    r._llvm_cttz_i32 = ib;
    var jb = 0;

    function kb(a) {
        return H[jb >> 2] = a
    }

    function lb(a) {
        lb.Ka || (y = y + 4095 & -4096, lb.Ka = l, w(ta), lb.Ia = ta, ta = function() {
            B("cannot dynamically allocate, sbrk now has control")
        });
        var b = y;
        0 != a && lb.Ia(a);
        return b
    }
    var R = {
        L: 1,
        Q: 2,
        Lc: 3,
        Gb: 4,
        D: 5,
        ma: 6,
        Ya: 7,
        dc: 8,
        Da: 9,
        nb: 10,
        ia: 11,
        Vc: 11,
        Fa: 12,
        Ca: 13,
        zb: 14,
        pc: 15,
        lb: 16,
        ja: 17,
        Wc: 18,
        ka: 19,
        rc: 20,
        Y: 21,
        C: 22,
        Zb: 23,
        Ea: 24,
        vc: 25,
        Sc: 26,
        Ab: 27,
        lc: 28,
        $: 29,
        Ic: 30,
        Sb: 31,
        Bc: 32,
        wb: 33,
        Fc: 34,
        hc: 42,
        Db: 43,
        ob: 44,
        Jb: 45,
        Kb: 46,
        Lb: 47,
        Rb: 48,
        Tc: 49,
        bc: 50,
        Ib: 51,
        tb: 35,
        ec: 37,
        eb: 52,
        hb: 53,
        Xc: 54,
        $b: 55,
        ib: 56,
        jb: 57,
        ub: 35,
        kb: 59,
        nc: 60,
        cc: 61,
        Pc: 62,
        mc: 63,
        ic: 64,
        jc: 65,
        Hc: 66,
        fc: 67,
        ab: 68,
        Mc: 69,
        pb: 70,
        Cc: 71,
        Ub: 72,
        xb: 73,
        gb: 74,
        wc: 76,
        fb: 77,
        Gc: 78,
        Mb: 79,
        Nb: 80,
        Qb: 81,
        Pb: 82,
        Ob: 83,
        oc: 38,
        la: 39,
        Vb: 36,
        Z: 40,
        xc: 95,
        Ac: 96,
        sb: 104,
        ac: 105,
        bb: 97,
        Ec: 91,
        tc: 88,
        kc: 92,
        Jc: 108,
        rb: 111,
        Za: 98,
        qb: 103,
        Yb: 101,
        Wb: 100,
        Qc: 110,
        Bb: 112,
        Cb: 113,
        Fb: 115,
        cb: 114,
        vb: 89,
        Tb: 90,
        Dc: 93,
        Kc: 94,
        $a: 99,
        Xb: 102,
        Hb: 106,
        qc: 107,
        Rc: 109,
        Uc: 87,
        yb: 122,
        Nc: 116,
        uc: 95,
        gc: 123,
        Eb: 84,
        yc: 75,
        mb: 125,
        sc: 131,
        zc: 130,
        Oc: 86
    };
    r._strlen = mb;
    var nb = {
            "0": "Success",
            1: "Not super-user",
            2: "No such file or directory",
            3: "No such process",
            4: "Interrupted system call",
            5: "I/O error",
            6: "No such device or address",
            7: "Arg list too long",
            8: "Exec format error",
            9: "Bad file number",
            10: "No children",
            11: "No more processes",
            12: "Not enough core",
            13: "Permission denied",
            14: "Bad address",
            15: "Block device required",
            16: "Mount device busy",
            17: "File exists",
            18: "Cross-device link",
            19: "No such device",
            20: "Not a directory",
            21: "Is a directory",
            22: "Invalid argument",
            23: "Too many open files in system",
            24: "Too many open files",
            25: "Not a typewriter",
            26: "Text file busy",
            27: "File too large",
            28: "No space left on device",
            29: "Illegal seek",
            30: "Read only file system",
            31: "Too many links",
            32: "Broken pipe",
            33: "Math arg out of domain of func",
            34: "Math result not representable",
            35: "File locking deadlock error",
            36: "File or path name too long",
            37: "No record locks available",
            38: "Function not implemented",
            39: "Directory not empty",
            40: "Too many symbolic links",
            42: "No message of desired type",
            43: "Identifier removed",
            44: "Channel number out of range",
            45: "Level 2 not synchronized",
            46: "Level 3 halted",
            47: "Level 3 reset",
            48: "Link number out of range",
            49: "Protocol driver not attached",
            50: "No CSI structure available",
            51: "Level 2 halted",
            52: "Invalid exchange",
            53: "Invalid request descriptor",
            54: "Exchange full",
            55: "No anode",
            56: "Invalid request code",
            57: "Invalid slot",
            59: "Bad font file fmt",
            60: "Device not a stream",
            61: "No data (for no delay io)",
            62: "Timer expired",
            63: "Out of streams resources",
            64: "Machine is not on the network",
            65: "Package not installed",
            66: "The object is remote",
            67: "The link has been severed",
            68: "Advertise error",
            69: "Srmount error",
            70: "Communication error on send",
            71: "Protocol error",
            72: "Multihop attempted",
            73: "Cross mount point (not really error)",
            74: "Trying to read unreadable message",
            75: "Value too large for defined data type",
            76: "Given log. name not unique",
            77: "f.d. invalid for this operation",
            78: "Remote address changed",
            79: "Can   access a needed shared lib",
            80: "Accessing a corrupted shared lib",
            81: ".lib section in a.out corrupted",
            82: "Attempting to link in too many libs",
            83: "Attempting to exec a shared library",
            84: "Illegal byte sequence",
            86: "Streams pipe error",
            87: "Too many users",
            88: "Socket operation on non-socket",
            89: "Destination address required",
            90: "Message too long",
            91: "Protocol wrong type for socket",
            92: "Protocol not available",
            93: "Unknown protocol",
            94: "Socket type not supported",
            95: "Not supported",
            96: "Protocol family not supported",
            97: "Address family not supported by protocol family",
            98: "Address already in use",
            99: "Address not available",
            100: "Network interface is not configured",
            101: "Network is unreachable",
            102: "Connection reset by network",
            103: "Connection aborted",
            104: "Connection reset by peer",
            105: "No buffer space available",
            106: "Socket is already connected",
            107: "Socket is not connected",
            108: "Can't send after socket shutdown",
            109: "Too many references",
            110: "Connection timed out",
            111: "Connection refused",
            112: "Host is down",
            113: "Host is unreachable",
            114: "Socket already connected",
            115: "Connection already in progress",
            116: "Stale file handle",
            122: "Quota exceeded",
            123: "No medium (in tape drive)",
            125: "Operation canceled",
            130: "Previous owner died",
            131: "State not recoverable"
        },
        ob = [];

    function pb(a, b) {
        ob[a] = {
            input: [],
            G: [],
            O: b
        };
        qb[a] = {
            k: rb
        }
    }
    var rb = {
            open: function(a) {
                var b = ob[a.e.U];
                b || e(new S(R.ka));
                a.p = b;
                a.seekable = p
            },
            close: function(a) {
                a.p.G.length && a.p.O.T(a.p, 10)
            },
            H: function(a, b, c, d) {
                (!a.p || !a.p.O.ta) && e(new S(R.ma));
                for (var f = 0, g = 0; g < d; g++) {
                    var h;
                    try {
                        h = a.p.O.ta(a.p)
                    } catch (k) {
                        e(new S(R.D))
                    }
                    h === i && 0 === f && e(new S(R.ia));
                    if (h === m || h === i) break;
                    f++;
                    b[c + g] = h
                }
                f && (a.e.timestamp = Date.now());
                return f
            },
            write: function(a, b, c, d) {
                (!a.p || !a.p.O.T) && e(new S(R.ma));
                for (var f = 0; f < d; f++) try {
                    a.p.O.T(a.p, b[c + f])
                } catch (g) {
                    e(new S(R.D))
                }
                d && (a.e.timestamp =
                    Date.now());
                return f
            }
        },
        T = {
            u: m,
            Ba: 1,
            X: 2,
            ha: 3,
            B: function() {
                return T.createNode(m, "/", 16895, 0)
            },
            createNode: function(a, b, c, d) {
                (24576 === (c & 61440) || 4096 === (c & 61440)) && e(new S(R.L));
                T.u || (T.u = {
                    dir: {
                        e: {
                            A: T.g.A,
                            o: T.g.o,
                            da: T.g.da,
                            K: T.g.K,
                            K: T.g.K,
                            rename: T.g.rename,
                            Aa: T.g.Aa,
                            za: T.g.za,
                            ya: T.g.ya,
                            W: T.g.W
                        },
                        I: {
                            F: T.k.F
                        }
                    },
                    file: {
                        e: {
                            A: T.g.A,
                            o: T.g.o
                        },
                        I: {
                            F: T.k.F,
                            H: T.k.H,
                            write: T.k.write,
                            na: T.k.na,
                            va: T.k.va
                        }
                    },
                    link: {
                        e: {
                            A: T.g.A,
                            o: T.g.o,
                            V: T.g.V
                        },
                        I: {}
                    },
                    qa: {
                        e: {
                            A: T.g.A,
                            o: T.g.o
                        },
                        I: sb
                    }
                });
                c = tb(a, b, c, d);
                16384 === (c.mode & 61440) ? (c.g =
                    T.u.dir.e, c.k = T.u.dir.I, c.n = {}) : 32768 === (c.mode & 61440) ? (c.g = T.u.file.e, c.k = T.u.file.I, c.n = [], c.S = T.X) : 40960 === (c.mode & 61440) ? (c.g = T.u.link.e, c.k = T.u.link.I) : 8192 === (c.mode & 61440) && (c.g = T.u.qa.e, c.k = T.u.qa.I);
                c.timestamp = Date.now();
                a && (a.n[b] = c);
                return c
            },
            ba: function(a) {
                a.S !== T.X && (a.n = Array.prototype.slice.call(a.n), a.S = T.X)
            },
            g: {
                A: function(a) {
                    var b = {};
                    b.hd = 8192 === (a.mode & 61440) ? a.id : 1;
                    b.od = a.id;
                    b.mode = a.mode;
                    b.td = 1;
                    b.uid = 0;
                    b.md = 0;
                    b.U = a.U;
                    b.size = 16384 === (a.mode & 61440) ? 4096 : 32768 === (a.mode & 61440) ? a.n.length :
                        40960 === (a.mode & 61440) ? a.link.length : 0;
                    b.dd = new Date(a.timestamp);
                    b.sd = new Date(a.timestamp);
                    b.gd = new Date(a.timestamp);
                    b.Ja = 4096;
                    b.ed = Math.ceil(b.size / b.Ja);
                    return b
                },
                o: function(a, b) {
                    b.mode !== i && (a.mode = b.mode);
                    b.timestamp !== i && (a.timestamp = b.timestamp);
                    if (b.size !== i) {
                        T.ba(a);
                        var c = a.n;
                        if (b.size < c.length) c.length = b.size;
                        else
                            for (; b.size > c.length;) c.push(0)
                    }
                },
                da: function() {
                    e(ub[R.Q])
                },
                K: function(a, b, c, d) {
                    return T.createNode(a, b, c, d)
                },
                rename: function(a, b, c) {
                    if (16384 === (a.mode & 61440)) {
                        var d;
                        try {
                            d = vb(b,
                                c)
                        } catch (f) {}
                        if (d)
                            for (var g in d.n) e(new S(R.la))
                    }
                    delete a.parent.n[a.name];
                    a.name = c;
                    b.n[c] = a;
                    a.parent = b
                },
                Aa: function(a, b) {
                    delete a.n[b]
                },
                za: function(a, b) {
                    var c = vb(a, b),
                        d;
                    for (d in c.n) e(new S(R.la));
                    delete a.n[b]
                },
                ya: function(a) {
                    var b = [".", ".."],
                        c;
                    for (c in a.n) a.n.hasOwnProperty(c) && b.push(c);
                    return b
                },
                W: function(a, b, c) {
                    a = T.createNode(a, b, 41471, 0);
                    a.link = c;
                    return a
                },
                V: function(a) {
                    40960 !== (a.mode & 61440) && e(new S(R.C));
                    return a.link
                }
            },
            k: {
                H: function(a, b, c, d, f) {
                    a = a.e.n;
                    if (f >= a.length) return 0;
                    d = Math.min(a.length -
                        f, d);
                    w(0 <= d);
                    if (8 < d && a.subarray) b.set(a.subarray(f, f + d), c);
                    else
                        for (var g = 0; g < d; g++) b[c + g] = a[f + g];
                    return d
                },
                write: function(a, b, c, d, f, g) {
                    var h = a.e;
                    h.timestamp = Date.now();
                    a = h.n;
                    if (d && 0 === a.length && 0 === f && b.subarray) return g && 0 === c ? (h.n = b, h.S = b.buffer === F.buffer ? T.Ba : T.ha) : (h.n = new Uint8Array(b.subarray(c, c + d)), h.S = T.ha), d;
                    T.ba(h);
                    for (a = h.n; a.length < f;) a.push(0);
                    for (g = 0; g < d; g++) a[f + g] = b[c + g];
                    return d
                },
                F: function(a, b, c) {
                    1 === c ? b += a.position : 2 === c && 32768 === (a.e.mode & 61440) && (b += a.e.n.length);
                    0 > b && e(new S(R.C));
                    a.Va = [];
                    return a.position = b
                },
                na: function(a, b, c) {
                    T.ba(a.e);
                    a = a.e.n;
                    for (b += c; b > a.length;) a.push(0)
                },
                va: function(a, b, c, d, f, g, h) {
                    32768 !== (a.e.mode & 61440) && e(new S(R.ka));
                    a = a.e.n;
                    if (!(h & 2) && (a.buffer === b || a.buffer === b.buffer)) f = p, d = a.byteOffset;
                    else {
                        if (0 < f || f + d < a.length) a = a.subarray ? a.subarray(f, f + d) : Array.prototype.slice.call(a, f, f + d);
                        f = l;
                        (d = L(d)) || e(new S(R.Fa));
                        b.set(a, d)
                    }
                    return {
                        wd: d,
                        cd: f
                    }
                }
            }
        },
        wb = K(1, "i32*", I),
        xb = K(1, "i32*", I),
        yb = K(1, "i32*", I),
        zb = m,
        qb = [m],
        Ab = [m],
        Bb = 1,
        Cb = m,
        Db = l,
        S = m,
        ub = {};

    function U(a, b) {
        a = Eb("/", a);
        b = b || {
            fa: 0
        };
        8 < b.fa && e(new S(R.Z));
        for (var c = Fb(a.split("/").filter(function(a) {
                return !!a
            }), p), d = zb, f = "/", g = 0; g < c.length; g++) {
            var h = g === c.length - 1;
            if (h && b.parent) break;
            d = vb(d, c[g]);
            f = V(f + "/" + c[g]);
            d.Pa && (d = d.B.root);
            if (!h || b.N)
                for (h = 0; 40960 === (d.mode & 61440);) {
                    d = U(f, {
                        N: p
                    }).e;
                    d.g.V || e(new S(R.C));
                    var d = d.g.V(d),
                        k = Eb;
                    var t = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(f).slice(1),
                        f = t[0],
                        t = t[1];
                    !f && !t ? f = "." : (t && (t = t.substr(0, t.length - 1)), f += t);
                    f = k(f, d);
                    d = U(f, {
                        fa: b.fa
                    }).e;
                    40 < h++ && e(new S(R.Z))
                }
        }
        return {
            path: f,
            e: d
        }
    }

    function W(a) {
        for (var b;;) {
            if (a === a.parent) return a = a.B.Qa, !b ? a : "/" !== a[a.length - 1] ? a + "/" + b : a + b;
            b = b ? a.name + "/" + b : a.name;
            a = a.parent
        }
    }

    function Gb(a, b) {
        for (var c = 0, d = 0; d < b.length; d++) c = (c << 5) - c + b.charCodeAt(d) | 0;
        return (a + c >>> 0) % Cb.length
    }

    function vb(a, b) {
        var c = Hb(a, "x");
        c && e(new S(c));
        for (c = Cb[Gb(a.id, b)]; c; c = c.Ra) {
            var d = c.name;
            if (c.parent.id === a.id && d === b) return c
        }
        return a.g.da(a, b)
    }

    function tb(a, b, c, d) {
        Ib || (Ib = function(a, b, c, d) {
            this.id = Bb++;
            this.name = b;
            this.mode = c;
            this.g = {};
            this.k = {};
            this.U = d;
            this.B = this.parent = m;
            a || (a = this);
            this.parent = a;
            this.B = a.B;
            a = Gb(this.parent.id, this.name);
            this.Ra = Cb[a];
            Cb[a] = this
        }, Ib.prototype = {}, Object.defineProperties(Ib.prototype, {
            H: {
                get: function() {
                    return 365 === (this.mode & 365)
                },
                set: function(a) {
                    a ? this.mode |= 365 : this.mode &= -366
                }
            },
            write: {
                get: function() {
                    return 146 === (this.mode & 146)
                },
                set: function(a) {
                    a ? this.mode |= 146 : this.mode &= -147
                }
            },
            Oa: {
                get: function() {
                    return 16384 ===
                        (this.mode & 61440)
                }
            },
            Na: {
                get: function() {
                    return 8192 === (this.mode & 61440)
                }
            }
        }));
        return new Ib(a, b, c, d)
    }
    var Jb = {
        r: 0,
        rs: 1052672,
        "r+": 2,
        w: 577,
        wx: 705,
        xw: 705,
        "w+": 578,
        "wx+": 706,
        "xw+": 706,
        a: 1089,
        ax: 1217,
        xa: 1217,
        "a+": 1090,
        "ax+": 1218,
        "xa+": 1218
    };

    function Hb(a, b) {
        return Db ? 0 : -1 !== b.indexOf("r") && !(a.mode & 292) || -1 !== b.indexOf("w") && !(a.mode & 146) || -1 !== b.indexOf("x") && !(a.mode & 73) ? R.Ca : 0
    }

    function Kb(a, b) {
        try {
            return vb(a, b), R.ja
        } catch (c) {}
        return Hb(a, "wx")
    }
    var sb = {
        open: function(a) {
            a.k = qb[a.e.U].k;
            a.k.open && a.k.open(a)
        },
        F: function() {
            e(new S(R.$))
        }
    };

    function Lb(a, b, c) {
        var d = U(a, {
                parent: l
            }).e,
            a = Mb(a),
            f = Kb(d, a);
        f && e(new S(f));
        d.g.K || e(new S(R.L));
        return d.g.K(d, a, b, c)
    }

    function Nb(a, b) {
        b = (b !== i ? b : 438) & 4095;
        b |= 32768;
        return Lb(a, b, 0)
    }

    function X(a, b) {
        b = (b !== i ? b : 511) & 1023;
        b |= 16384;
        return Lb(a, b, 0)
    }

    function Ob(a, b, c) {
        "undefined" === typeof c && (c = b, b = 438);
        return Lb(a, b | 8192, c)
    }

    function Pb(a, b) {
        var c = U(b, {
                parent: l
            }).e,
            d = Mb(b),
            f = Kb(c, d);
        f && e(new S(f));
        c.g.W || e(new S(R.L));
        return c.g.W(c, d, a)
    }

    function Qb(a, b) {
        var c;
        c = "string" === typeof a ? U(a, {
            N: l
        }).e : a;
        c.g.o || e(new S(R.L));
        c.g.o(c, {
            mode: b & 4095 | c.mode & -4096,
            timestamp: Date.now()
        })
    }

    function Rb(a, b) {
        var c, d;
        "string" === typeof b ? (d = Jb[b], "undefined" === typeof d && e(Error("Unknown file open mode: " + b))) : d = b;
        b = d;
        c = b & 64 ? ("undefined" === typeof c ? 438 : c) & 4095 | 32768 : 0;
        var f;
        if ("object" === typeof a) f = a;
        else {
            a = V(a);
            try {
                f = U(a, {
                    N: !(b & 131072)
                }).e
            } catch (g) {}
        }
        b & 64 && (f ? b & 128 && e(new S(R.ja)) : f = Lb(a, c, 0));
        f || e(new S(R.Q));
        8192 === (f.mode & 61440) && (b &= -513);
        f ? 40960 === (f.mode & 61440) ? c = R.Z : 16384 === (f.mode & 61440) && (0 !== (b & 2097155) || b & 512) ? c = R.Y : (c = ["r", "w", "rw"][b & 2097155], b & 512 && (c += "w"), c = Hb(f, c)) : c = R.Q;
        c && e(new S(c));
        b & 512 && (c = f, c = "string" === typeof c ? U(c, {
            N: l
        }).e : c, c.g.o || e(new S(R.L)), 16384 === (c.mode & 61440) && e(new S(R.Y)), 32768 !== (c.mode & 61440) && e(new S(R.C)), (d = Hb(c, "w")) && e(new S(d)), c.g.o(c, {
            size: 0,
            timestamp: Date.now()
        }));
        var b = b & -641,
            h;
        f = {
            e: f,
            path: W(f),
            M: b,
            seekable: l,
            position: 0,
            k: f.k,
            Va: [],
            error: p
        };
        Y || (Y = q(), Y.prototype = {}, Object.defineProperties(Y.prototype, {
            object: {
                get: function() {
                    return this.e
                },
                set: function(a) {
                    this.e = a
                }
            },
            qd: {
                get: function() {
                    return 1 !== (this.M & 2097155)
                }
            },
            rd: {
                get: function() {
                    return 0 !==
                        (this.M & 2097155)
                }
            },
            pd: {
                get: function() {
                    return this.M & 1024
                }
            }
        }));
        if (f.__proto__) f.__proto__ = Y.prototype;
        else {
            c = new Y;
            for (var k in f) c[k] = f[k];
            f = c
        }
        a: {
            k = i || 4096;
            for (c = i || 1; c <= k; c++)
                if (!Ab[c]) {
                    h = c;
                    break a
                }
            e(new S(R.Ea))
        }
        f.q = h;
        h = Ab[h] = f;
        h.k.open && h.k.open(h);
        r.logReadFiles && !(b & 1) && (Sb || (Sb = {}), a in Sb || (Sb[a] = 1, r.printErr("read file: " + a)));
        return h
    }

    function Tb(a) {
        try {
            a.k.close && a.k.close(a)
        } catch (b) {
            e(b)
        } finally {
            Ab[a.q] = m
        }
    }

    function Ub() {
        S || (S = function(a) {
            this.jd = a;
            for (var b in R)
                if (R[b] === a) {
                    this.code = b;
                    break
                }
            this.message = nb[a];
            this.stack = Ma()
        }, S.prototype = Error(), [R.Q].forEach(function(a) {
            ub[a] = new S(a);
            ub[a].stack = "<generic error, no stack>"
        }))
    }
    var Vb;

    function Wb(a, b) {
        var c = 0;
        a && (c |= 365);
        b && (c |= 146);
        return c
    }

    function Xb(a, b, c, d, f, g) {
        a = b ? V(("string" === typeof a ? a : W(a)) + "/" + b) : a;
        d = Wb(d, f);
        f = Nb(a, d);
        if (c) {
            if ("string" === typeof c) {
                for (var a = Array(c.length), b = 0, h = c.length; b < h; ++b) a[b] = c.charCodeAt(b);
                c = a
            }
            Qb(f, d | 146);
            var a = Rb(f, "w"),
                b = c,
                h = c.length,
                k = 0;
            (0 > h || 0 > k) && e(new S(R.C));
            0 === (a.M & 2097155) && e(new S(R.Da));
            16384 === (a.e.mode & 61440) && e(new S(R.Y));
            a.k.write || e(new S(R.C));
            c = l;
            "undefined" === typeof k ? (k = a.position, c = p) : a.seekable || e(new S(R.$));
            a.M & 1024 && ((!a.seekable || !a.k.F) && e(new S(R.$)), a.k.F(a, 0, 2));
            g =
                a.k.write(a, b, 0, h, k, g);
            c || (a.position += g);
            Tb(a);
            Qb(f, d)
        }
        return f
    }

    function Z(a, b, c, d) {
        a = V(("string" === typeof a ? a : W(a)) + "/" + b);
        b = Wb(!!c, !!d);
        Z.ua || (Z.ua = 64);
        var f;
        f = Z.ua++ << 8 | 0;
        qb[f] = {
            k: {
                open: function(a) {
                    a.seekable = p
                },
                close: function() {
                    d && (d.buffer && d.buffer.length) && d(10)
                },
                H: function(a, b, d, f) {
                    for (var j = 0, z = 0; z < f; z++) {
                        var A;
                        try {
                            A = c()
                        } catch (n) {
                            e(new S(R.D))
                        }
                        A === i && 0 === j && e(new S(R.ia));
                        if (A === m || A === i) break;
                        j++;
                        b[d + z] = A
                    }
                    j && (a.e.timestamp = Date.now());
                    return j
                },
                write: function(a, b, c, f) {
                    for (var j = 0; j < f; j++) try {
                        d(b[c + j])
                    } catch (z) {
                        e(new S(R.D))
                    }
                    f && (a.e.timestamp = Date.now());
                    return j
                }
            }
        };
        return Ob(a, b, f)
    }

    function Yb(a) {
        if (a.Na || a.Oa || a.link || a.n) return l;
        var b = l;
        "undefined" !== typeof XMLHttpRequest && e(Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."));
        if (r.read) try {
            a.n = D(r.read(a.url), l)
        } catch (c) {
            b = p
        } else e(Error("Cannot load without read() or XMLHttpRequest."));
        b || kb(R.D);
        return b
    }
    var Ib, Y, Sb;

    function Fb(a, b) {
        for (var c = 0, d = a.length - 1; 0 <= d; d--) {
            var f = a[d];
            "." === f ? a.splice(d, 1) : ".." === f ? (a.splice(d, 1), c++) : c && (a.splice(d, 1), c--)
        }
        if (b)
            for (; c--; c) a.unshift("..");
        return a
    }

    function V(a) {
        var b = "/" === a.charAt(0),
            c = "/" === a.substr(-1),
            a = Fb(a.split("/").filter(function(a) {
                return !!a
            }), !b).join("/");
        !a && !b && (a = ".");
        a && c && (a += "/");
        return (b ? "/" : "") + a
    }

    function Mb(a) {
        if ("/" === a) return "/";
        var b = a.lastIndexOf("/");
        return -1 === b ? a : a.substr(b + 1)
    }

    function Eb() {
        for (var a = "", b = p, c = arguments.length - 1; - 1 <= c && !b; c--) {
            var d = 0 <= c ? arguments[c] : "/";
            "string" !== typeof d && e(new TypeError("Arguments to path.resolve must be strings"));
            d && (a = d + "/" + a, b = "/" === d.charAt(0))
        }
        a = Fb(a.split("/").filter(function(a) {
            return !!a
        }), !b).join("/");
        return (b ? "/" : "") + a || "."
    }
    var Zb = p,
        $b = p,
        ac = p,
        bc = p,
        cc = i,
        dc = i;

    function ec(a) {
        return {
            jpg: "image/jpeg",
            jpeg: "image/jpeg",
            png: "image/png",
            bmp: "image/bmp",
            ogg: "audio/ogg",
            wav: "audio/wav",
            mp3: "audio/mpeg"
        }[a.substr(a.lastIndexOf(".") + 1)]
    }
    var fc = [];

    function gc() {
        var a = r.canvas;
        fc.forEach(function(b) {
            b(a.width, a.height)
        })
    }

    function hc() {
        var a = r.canvas;
        this.Xa = a.width;
        this.Wa = a.height;
        a.width = screen.width;
        a.height = screen.height;
        "undefined" != typeof SDL && (a = Oa[SDL.screen + 0 * ma >> 2], H[SDL.screen + 0 * ma >> 2] = a | 8388608);
        gc()
    }

    function ic() {
        var a = r.canvas;
        a.width = this.Xa;
        a.height = this.Wa;
        "undefined" != typeof SDL && (a = Oa[SDL.screen + 0 * ma >> 2], H[SDL.screen + 0 * ma >> 2] = a & -8388609);
        gc()
    }
    var jc, kc, lc, mc, jb = ra(4);
    H[jb >> 2] = 0;
    r.requestFullScreen = function(a, b) {
        function c() {
            $b = p;
            (document.webkitFullScreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.mozFullscreenElement || document.fullScreenElement || document.fullscreenElement) === d ? (d.pa = document.cancelFullScreen || document.mozCancelFullScreen || document.webkitCancelFullScreen, d.pa = d.pa.bind(document), cc && d.ga(), $b = l, dc && hc()) : dc && ic();
            if (r.onFullScreen) r.onFullScreen($b)
        }
        cc = a;
        dc = b;
        "undefined" === typeof cc && (cc = l);
        "undefined" === typeof dc &&
            (dc = p);
        var d = r.canvas;
        bc || (bc = l, document.addEventListener("fullscreenchange", c, p), document.addEventListener("mozfullscreenchange", c, p), document.addEventListener("webkitfullscreenchange", c, p));
        d.Ta = d.requestFullScreen || d.mozRequestFullScreen || (d.webkitRequestFullScreen ? function() {
            d.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)
        } : m);
        d.Ta()
    };
    r.requestAnimationFrame = function(a) {
        "undefined" === typeof window ? setTimeout(a, 1E3 / 60) : (window.requestAnimationFrame || (window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || window.setTimeout), window.requestAnimationFrame(a))
    };
    r.setCanvasSize = function(a, b, c) {
        var d = r.canvas;
        d.width = a;
        d.height = b;
        c || gc()
    };
    r.pauseMainLoop = q();
    r.resumeMainLoop = function() {
        Zb && (Zb = p, m())
    };
    r.getUserMedia = function() {
        window.sa || (window.sa = navigator.getUserMedia || navigator.mozGetUserMedia);
        window.sa(i)
    };
    Ub();
    var Cb = Array(4096),
        zb = tb(m, "/", 16895, 0),
        nc = T,
        oc = "/",
        pc;
    oc && (pc = U(oc, {
        N: p
    }), oc = pc.path);
    var qc = {
            type: nc,
            vd: {},
            Qa: oc,
            root: m
        },
        rc = nc.B(qc);
    rc.B = qc;
    qc.root = rc;
    pc && (pc.e.B = qc, pc.e.Pa = l, "/" === oc && (zb = qc.root));
    X("/tmp");
    X("/dev");
    qb[259] = {
        k: {
            H: function() {
                return 0
            },
            write: function() {
                return 0
            }
        }
    };
    Ob("/dev/null", 259);
    pb(1280, {
        ta: function(a) {
            if (!a.input.length) {
                var b = m;
                if (ba) {
                    if (b = process.stdin.read(), !b) {
                        if (process.stdin._readableState && process.stdin._readableState.ended) return m;
                        return
                    }
                } else "undefined" != typeof window && "function" == typeof window.prompt ? (b = window.prompt("Input: "), b !== m && (b += "\n")) : "function" == typeof readline && (b = readline(), b !== m && (b += "\n"));
                if (!b) return m;
                a.input = D(b, l)
            }
            return a.input.shift()
        },
        T: function(a, b) {
            b === m || 10 === b ? (r.print(a.G.join("")), a.G = []) : a.G.push(sc.ea(b))
        }
    });
    pb(1536, {
        T: function(a, b) {
            b === m || 10 === b ? (r.printErr(a.G.join("")), a.G = []) : a.G.push(sc.ea(b))
        }
    });
    Ob("/dev/tty", 1280);
    Ob("/dev/tty1", 1536);
    X("/dev/shm");
    X("/dev/shm/tmp");
    P.unshift({
        J: function() {
            if (!r.noFSInit && !Vb) {
                w(!Vb, "FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");
                Vb = l;
                Ub();
                r.stdin = r.stdin;
                r.stdout = r.stdout;
                r.stderr = r.stderr;
                r.stdin ? Z("/dev", "stdin", r.stdin) : Pb("/dev/tty", "/dev/stdin");
                r.stdout ? Z("/dev", "stdout", m, r.stdout) : Pb("/dev/tty", "/dev/stdout");
                r.stderr ? Z("/dev", "stderr", m, r.stderr) : Pb("/dev/tty1", "/dev/stderr");
                var a = Rb("/dev/stdin",
                    "r");
                H[wb >> 2] = a.q;
                w(1 === a.q, "invalid handle for stdin (" + a.q + ")");
                a = Rb("/dev/stdout", "w");
                H[xb >> 2] = a.q;
                w(2 === a.q, "invalid handle for stdout (" + a.q + ")");
                a = Rb("/dev/stderr", "w");
                H[yb >> 2] = a.q;
                w(3 === a.q, "invalid handle for stderr (" + a.q + ")")
            }
        }
    });
    Ua.push({
        J: function() {
            Db = p
        }
    });
    Va.push({
        J: function() {
            Vb = p;
            for (var a = 0; a < Ab.length; a++) {
                var b = Ab[a];
                b && Tb(b)
            }
        }
    });
    r.FS_createFolder = function(a, b, c, d) {
        a = V(("string" === typeof a ? a : W(a)) + "/" + b);
        return X(a, Wb(c, d))
    };
    r.FS_createPath = function(a, b) {
        for (var a = "string" === typeof a ? a : W(a), c = b.split("/").reverse(); c.length;) {
            var d = c.pop();
            if (d) {
                var f = V(a + "/" + d);
                try {
                    X(f)
                } catch (g) {}
                a = f
            }
        }
        return f
    };
    r.FS_createDataFile = Xb;
    r.FS_createPreloadedFile = function(a, b, c, d, f, g, h, k, t) {
        function j() {
            ac = document.pointerLockElement === n || document.mozPointerLockElement === n || document.webkitPointerLockElement === n
        }

        function z(c) {
            function j(c) {
                k || Xb(a, b, c, d, f, t);
                g && g();
                cb()
            }
            var n = p;
            r.preloadPlugins.forEach(function(a) {
                !n && a.canHandle(v) && (a.handle(c, v, j, function() {
                    h && h();
                    cb()
                }), n = l)
            });
            n || j(c)
        }
        r.preloadPlugins || (r.preloadPlugins = []);
        if (!jc && !ea) {
            jc = l;
            try {
                new Blob, kc = l
            } catch (A) {
                kc = p, console.log("warning: no blob constructor, cannot create blobs with mimetypes")
            }
            lc =
                "undefined" != typeof MozBlobBuilder ? MozBlobBuilder : "undefined" != typeof WebKitBlobBuilder ? WebKitBlobBuilder : !kc ? console.log("warning: no BlobBuilder") : m;
            mc = "undefined" != typeof window ? window.URL ? window.URL : window.webkitURL : i;
            !r.wa && "undefined" === typeof mc && (console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."), r.wa = l);
            r.preloadPlugins.push({
                canHandle: function(a) {
                    return !r.wa && /\.(jpg|jpeg|png|bmp)$/i.test(a)
                },
                handle: function(a, b,
                    c, d) {
                    var f = m;
                    if (kc) try {
                        f = new Blob([a], {
                            type: ec(b)
                        }), f.size !== a.length && (f = new Blob([(new Uint8Array(a)).buffer], {
                            type: ec(b)
                        }))
                    } catch (g) {
                        var h = "Blob constructor present but fails: " + g + "; falling back to blob builder";
                        oa || (oa = {});
                        oa[h] || (oa[h] = 1, r.P(h))
                    }
                    f || (f = new lc, f.append((new Uint8Array(a)).buffer), f = f.getBlob());
                    var j = mc.createObjectURL(f),
                        n = new Image;
                    n.onload = function() {
                        w(n.complete, "Image " + b + " could not be decoded");
                        var d = document.createElement("canvas");
                        d.width = n.width;
                        d.height = n.height;
                        d.getContext("2d").drawImage(n,
                            0, 0);
                        r.preloadedImages[b] = d;
                        mc.revokeObjectURL(j);
                        c && c(a)
                    };
                    n.onerror = function() {
                        console.log("Image " + j + " could not be decoded");
                        d && d()
                    };
                    n.src = j
                }
            });
            r.preloadPlugins.push({
                canHandle: function(a) {
                    return !r.ud && a.substr(-4) in {
                        ".ogg": 1,
                        ".wav": 1,
                        ".mp3": 1
                    }
                },
                handle: function(a, b, c, d) {
                    function f(d) {
                        h || (h = l, r.preloadedAudios[b] = d, c && c(a))
                    }

                    function g() {
                        h || (h = l, r.preloadedAudios[b] = new Audio, d && d())
                    }
                    var h = p;
                    if (kc) {
                        try {
                            var j = new Blob([a], {
                                type: ec(b)
                            })
                        } catch (n) {
                            return g()
                        }
                        var j = mc.createObjectURL(j),
                            k = new Audio;
                        k.addEventListener("canplaythrough",
                            function() {
                                f(k)
                            }, p);
                        k.onerror = function() {
                            if (!h) {
                                console.log("warning: browser could not fully decode audio " + b + ", trying slower base64 approach");
                                for (var c = "", d = 0, g = 0, j = 0; j < a.length; j++) {
                                    d = d << 8 | a[j];
                                    for (g += 8; 6 <= g;) var n = d >> g - 6 & 63,
                                        g = g - 6,
                                        c = c + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [n]
                                }
                                2 == g ? (c += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [(d & 3) << 4], c += "==") : 4 == g && (c += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [(d & 15) << 2], c += "=");
                                k.src = "data:audio/x-" + b.substr(-3) + ";base64," + c;
                                f(k)
                            }
                        };
                        k.src = j;
                        setTimeout(function() {
                            xa || f(k)
                        }, 1E4)
                    } else return g()
                }
            });
            var n = r.canvas;
            n.ga = n.requestPointerLock || n.mozRequestPointerLock || n.webkitRequestPointerLock;
            n.ra = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock || q();
            n.ra = n.ra.bind(document);
            document.addEventListener("pointerlockchange", j, p);
            document.addEventListener("mozpointerlockchange", j, p);
            document.addEventListener("webkitpointerlockchange", j, p);
            r.elementPointerLock &&
                n.addEventListener("click", function(a) {
                    !ac && n.ga && (n.ga(), a.preventDefault())
                }, p)
        }
        var v = b ? Eb(V(a + "/" + b)) : a;
        bb();
        if ("string" == typeof c) {
            var E = h,
                da = function() {
                    E ? E() : e('Loading data file "' + c + '" failed.')
                },
                J = new XMLHttpRequest;
            J.open("GET", c, l);
            J.responseType = "arraybuffer";
            J.onload = function() {
                if (200 == J.status || 0 == J.status && J.response) {
                    var a = J.response;
                    w(a, 'Loading data file "' + c + '" failed (no arrayBuffer).');
                    a = new Uint8Array(a);
                    z(a);
                    cb()
                } else da()
            };
            J.onerror = da;
            J.send(m);
            bb()
        } else z(c)
    };
    r.FS_createLazyFile = function(a, b, c, d, f) {
        var g, h;
        "undefined" !== typeof XMLHttpRequest ? (ea || e("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc"), g = function() {
            this.ca = p;
            this.R = []
        }, g.prototype.get = function(a) {
            if (!(a > this.length - 1 || 0 > a)) {
                var b = a % this.La;
                return this.Ma(Math.floor(a / this.La))[b]
            }
        }, g.prototype.Ua = function(a) {
            this.Ma = a
        }, g.prototype.oa = function() {
            var a = new XMLHttpRequest;
            a.open("HEAD", c, p);
            a.send(m);
            200 <= a.status && 300 > a.status ||
                304 === a.status || e(Error("Couldn't load " + c + ". Status: " + a.status));
            var b = Number(a.getResponseHeader("Content-length")),
                d, f = 1048576;
            if (!((d = a.getResponseHeader("Accept-Ranges")) && "bytes" === d)) f = b;
            var g = this;
            g.Ua(function(a) {
                var d = a * f,
                    h = (a + 1) * f - 1,
                    h = Math.min(h, b - 1);
                if ("undefined" === typeof g.R[a]) {
                    var k = g.R;
                    d > h && e(Error("invalid range (" + d + ", " + h + ") or no bytes requested!"));
                    h > b - 1 && e(Error("only " + b + " bytes available! programmer error!"));
                    var j = new XMLHttpRequest;
                    j.open("GET", c, p);
                    b !== f && j.setRequestHeader("Range",
                        "bytes=" + d + "-" + h);
                    "undefined" != typeof Uint8Array && (j.responseType = "arraybuffer");
                    j.overrideMimeType && j.overrideMimeType("text/plain; charset=x-user-defined");
                    j.send(m);
                    200 <= j.status && 300 > j.status || 304 === j.status || e(Error("Couldn't load " + c + ". Status: " + j.status));
                    d = j.response !== i ? new Uint8Array(j.response || []) : D(j.responseText || "", l);
                    k[a] = d
                }
                "undefined" === typeof g.R[a] && e(Error("doXHR failed!"));
                return g.R[a]
            });
            this.Ha = b;
            this.Ga = f;
            this.ca = l
        }, g = new g, Object.defineProperty(g, "length", {
            get: function() {
                this.ca ||
                    this.oa();
                return this.Ha
            }
        }), Object.defineProperty(g, "chunkSize", {
            get: function() {
                this.ca || this.oa();
                return this.Ga
            }
        }), h = i) : (h = c, g = i);
        var k, a = V(("string" === typeof a ? a : W(a)) + "/" + b);
        k = Nb(a, Wb(d, f));
        g ? k.n = g : h && (k.n = m, k.url = h);
        var t = {};
        Object.keys(k.k).forEach(function(a) {
            var b = k.k[a];
            t[a] = function() {
                Yb(k) || e(new S(R.D));
                return b.apply(m, arguments)
            }
        });
        t.H = function(a, b, c, d, f) {
            Yb(k) || e(new S(R.D));
            a = a.e.n;
            if (f >= a.length) return 0;
            d = Math.min(a.length - f, d);
            w(0 <= d);
            if (a.slice)
                for (var g = 0; g < d; g++) b[c + g] = a[f + g];
            else
                for (g = 0; g < d; g++) b[c + g] = a.get(f + g);
            return d
        };
        k.k = t;
        return k
    };
    r.FS_createLink = function(a, b, c) {
        a = V(("string" === typeof a ? a : W(a)) + "/" + b);
        return Pb(c, a)
    };
    r.FS_createDevice = Z;
    P.unshift({
        J: q()
    });
    Va.push({
        J: q()
    });
    var sc = new pa;
    ba && (require("fs"), process.platform.match(/^win/));
    Qa = u = va(x);
    Ra = Qa + 5242880;
    Sa = y = va(Ra);
    w(Sa < ua);
    Fa = Math.min;
    var $ = (function(global, env, buffer) {
            // EMSCRIPTEN_START_ASM
            "use asm";
            var a = new global.Int8Array(buffer);
            var b = new global.Int16Array(buffer);
            var c = new global.Int32Array(buffer);
            var d = new global.Uint8Array(buffer);
            var e = new global.Uint16Array(buffer);
            var f = new global.Uint32Array(buffer);
            var g = new global.Float32Array(buffer);
            var h = new global.Float64Array(buffer);
            var i = env.STACKTOP | 0;
            var j = env.STACK_MAX | 0;
            var k = env.tempDoublePtr | 0;
            var l = env.ABORT | 0;
            var m = env.cttz_i8 | 0;
            var n = env.ctlz_i8 | 0;
            var o = +env.NaN;
            var p = +env.Infinity;
            var q = 0;
            var r = 0;
            var s = 0;
            var t = 0;
            var u = 0,
                v = 0,
                w = 0,
                x = 0,
                y = 0.0,
                z = 0,
                A = 0,
                B = 0,
                C = 0.0;
            var D = 0;
            var E = 0;
            var F = 0;
            var G = 0;
            var H = 0;
            var I = 0;
            var J = 0;
            var K = 0;
            var L = 0;
            var M = 0;
            var N = global.Math.floor;
            var O = global.Math.abs;
            var P = global.Math.sqrt;
            var Q = global.Math.pow;
            var R = global.Math.cos;
            var S = global.Math.sin;
            var T = global.Math.tan;
            var U = global.Math.acos;
            var V = global.Math.asin;
            var W = global.Math.atan;
            var X = global.Math.atan2;
            var Y = global.Math.exp;
            var Z = global.Math.log;
            var _ = global.Math.ceil;
            var $ = global.Math.imul;
            var aa = env.abort;
            var ab = env.assert;
            var ac = env.asmPrintInt;
            var ad = env.asmPrintFloat;
            var ae = env.min;
            var af = env.invoke_ii;
            var ag = env.invoke_v;
            var ah = env.invoke_iii;
            var ai = env.invoke_vi;
            var aj = env._sysconf;
            var ak = env._sbrk;
            var al = env.___setErrNo;
            var am = env.___errno_location;
            var an = env._abort;
            var ao = env._time;
            var ap = env._fflush;
            var aq = 0.0;
            // EMSCRIPTEN_START_FUNCS
            function av(a) {
                a = a | 0;
                var b = 0;
                b = i;
                i = i + a | 0;
                i = i + 7 & -8;
                return b | 0
            }

            function aw() {
                return i | 0
            }

            function ax(a) {
                a = a | 0;
                i = a
            }

            function ay(a, b) {
                a = a | 0;
                b = b | 0;
                if ((q | 0) == 0) {
                    q = a;
                    r = b
                }
            }

            function az(b) {
                b = b | 0;
                a[k] = a[b];
                a[k + 1 | 0] = a[b + 1 | 0];
                a[k + 2 | 0] = a[b + 2 | 0];
                a[k + 3 | 0] = a[b + 3 | 0]
            }

            function aA(b) {
                b = b | 0;
                a[k] = a[b];
                a[k + 1 | 0] = a[b + 1 | 0];
                a[k + 2 | 0] = a[b + 2 | 0];
                a[k + 3 | 0] = a[b + 3 | 0];
                a[k + 4 | 0] = a[b + 4 | 0];
                a[k + 5 | 0] = a[b + 5 | 0];
                a[k + 6 | 0] = a[b + 6 | 0];
                a[k + 7 | 0] = a[b + 7 | 0]
            }

            function aB(a) {
                a = a | 0;
                D = a
            }

            function aC(a) {
                a = a | 0;
                E = a
            }

            function aD(a) {
                a = a | 0;
                F = a
            }

            function aE(a) {
                a = a | 0;
                G = a
            }

            function aF(a) {
                a = a | 0;
                H = a
            }

            function aG(a) {
                a = a | 0;
                I = a
            }

            function aH(a) {
                a = a | 0;
                J = a
            }

            function aI(a) {
                a = a | 0;
                K = a
            }

            function aJ(a) {
                a = a | 0;
                L = a
            }

            function aK(a) {
                a = a | 0;
                M = a
            }

            function aL() {}

            function aM(f, g, h) {
                f = f | 0;
                g = g | 0;
                h = h | 0;
                var j = 0,
                    k = 0,
                    l = 0,
                    m = 0,
                    n = 0,
                    o = 0,
                    p = 0,
                    q = 0,
                    r = 0,
                    s = 0,
                    t = 0,
                    u = 0,
                    w = 0,
                    x = 0,
                    y = 0,
                    z = 0,
                    A = 0,
                    B = 0,
                    C = 0,
                    D = 0,
                    E = 0,
                    F = 0,
                    G = 0,
                    H = 0,
                    I = 0,
                    J = 0,
                    K = 0,
                    L = 0,
                    M = 0,
                    N = 0,
                    O = 0,
                    P = 0,
                    Q = 0,
                    R = 0,
                    S = 0,
                    T = 0,
                    U = 0,
                    V = 0,
                    W = 0,
                    X = 0,
                    Y = 0,
                    Z = 0,
                    _ = 0,
                    aa = 0,
                    ab = 0,
                    ac = 0,
                    ad = 0,
                    ae = 0,
                    af = 0,
                    ag = 0,
                    ah = 0,
                    ai = 0,
                    aj = 0,
                    ak = 0,
                    al = 0,
                    am = 0,
                    an = 0,
                    ao = 0,
                    ap = 0,
                    aq = 0,
                    ar = 0,
                    as = 0,
                    at = 0,
                    au = 0,
                    av = 0,
                    aw = 0,
                    ax = 0,
                    ay = 0,
                    az = 0,
                    aA = 0,
                    aB = 0,
                    aC = 0,
                    aD = 0,
                    aE = 0,
                    aF = 0,
                    aG = 0;
                j = i;
                i = i + 16384 | 0;
                k = j | 0;
                l = k;
                aR(l | 0, 0, 16384) | 0;
                l = f + h | 0;
                m = h - 12 | 0;
                n = f + m | 0;
                o = f + (h - 5) | 0;
                p = h >>> 0 > 2113929216 >>> 0;
                if ((h | 0) >= 65547) {
                    if (p) {
                        q = 0;
                        i = j;
                        return q | 0
                    }
                    r = f;
                    c[k + (($(d[r] | d[r + 1 | 0] << 8 | d[r + 2 | 0] << 16 | d[r + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 20 << 2) >> 2] = f;
                    L6: do {
                        if ((m | 0) < 2) {
                            s = f;
                            t = g
                        } else {
                            r = f + (h - 8) | 0;
                            u = f + (h - 6) | 0;
                            w = g;
                            x = f;
                            y = f;
                            z = f + 2 | 0;
                            while (1) {
                                A = y + 1 | 0;
                                B = A;
                                C = A;
                                A = d[B] | d[B + 1 | 0] << 8 | d[B + 2 | 0] << 16 | d[B + 3 | 0] << 24 | 0;
                                B = 68;
                                D = z;
                                while (1) {
                                    E = ($(A, -1640531535) | 0) >>> 20;
                                    F = D;
                                    G = d[F] | d[F + 1 | 0] << 8 | d[F + 2 | 0] << 16 | d[F + 3 | 0] << 24 | 0;
                                    F = k + (E << 2) | 0;
                                    E = c[F >> 2] | 0;
                                    c[F >> 2] = C;
                                    if ((E + 65535 | 0) >>> 0 >= C >>> 0) {
                                        F = E;
                                        H = C;
                                        if ((d[F] | d[F + 1 | 0] << 8 | d[F + 2 | 0] << 16 | d[F + 3 | 0] << 24 | 0) == (d[H] | d[H + 1 | 0] << 8 | d[H + 2 | 0] << 16 | d[H + 3 | 0] << 24 | 0)) {
                                            I = C;
                                            J = E;
                                            break
                                        }
                                    }
                                    E = D + (B >> 6) | 0;
                                    if (E >>> 0 > n >>> 0) {
                                        s = x;
                                        t = w;
                                        break L6
                                    } else {
                                        C = D;
                                        A = G;
                                        B = B + 1 | 0;
                                        D = E
                                    }
                                }
                                while (1) {
                                    if (!(I >>> 0 > x >>> 0 & J >>> 0 > f >>> 0)) {
                                        break
                                    }
                                    D = I - 1 | 0;
                                    B = J - 1 | 0;
                                    if ((a[D] | 0) == (a[B] | 0)) {
                                        I = D;
                                        J = B
                                    } else {
                                        break
                                    }
                                }
                                B = I;
                                D = x;
                                A = B - D | 0;
                                C = w + 1 | 0;
                                if ((A | 0) > 14) {
                                    E = A - 15 | 0;
                                    a[w] = -16;
                                    if ((E | 0) > 254) {
                                        G = B - 270 - D | 0;
                                        D = (G >>> 0) / 255 | 0;
                                        B = D + 1 | 0;
                                        aR(C | 0, -1 | 0, B | 0) | 0;
                                        K = G + (D * -255 | 0) & 255;
                                        L = w + (D + 2) | 0
                                    } else {
                                        K = E & 255;
                                        L = C
                                    }
                                    a[L] = K;
                                    M = L + 1 | 0
                                } else {
                                    a[w] = A << 4 & 255;
                                    M = C
                                }
                                C = M + A | 0;
                                A = x;
                                E = M;
                                while (1) {
                                    D = A;
                                    G = E;
                                    v = d[D] | d[D + 1 | 0] << 8 | d[D + 2 | 0] << 16 | d[D + 3 | 0] << 24 | 0;
                                    a[G] = v & 255;
                                    v = v >> 8;
                                    a[G + 1 | 0] = v & 255;
                                    v = v >> 8;
                                    a[G + 2 | 0] = v & 255;
                                    v = v >> 8;
                                    a[G + 3 | 0] = v & 255;
                                    G = A + 4 | 0;
                                    D = E + 4 | 0;
                                    v = d[G] | d[G + 1 | 0] << 8 | d[G + 2 | 0] << 16 | d[G + 3 | 0] << 24 | 0;
                                    a[D] = v & 255;
                                    v = v >> 8;
                                    a[D + 1 | 0] = v & 255;
                                    v = v >> 8;
                                    a[D + 2 | 0] = v & 255;
                                    v = v >> 8;
                                    a[D + 3 | 0] = v & 255;
                                    D = E + 8 | 0;
                                    if (D >>> 0 < C >>> 0) {
                                        A = A + 8 | 0;
                                        E = D
                                    } else {
                                        N = I;
                                        O = C;
                                        P = J;
                                        Q = w;
                                        break
                                    }
                                }
                                while (1) {
                                    C = O;
                                    v = N - P & 65535;
                                    a[C] = v & 255;
                                    v = v >> 8;
                                    a[C + 1 | 0] = v & 255;
                                    C = O + 2 | 0;
                                    E = N + 4 | 0;
                                    A = E;
                                    D = P;
                                    while (1) {
                                        R = D + 4 | 0;
                                        if (A >>> 0 >= r >>> 0) {
                                            S = 68;
                                            break
                                        }
                                        G = R;
                                        T = d[G] | d[G + 1 | 0] << 8 | d[G + 2 | 0] << 16 | d[G + 3 | 0] << 24 | 0;
                                        G = A;
                                        U = d[G] | d[G + 1 | 0] << 8 | d[G + 2 | 0] << 16 | d[G + 3 | 0] << 24 | 0;
                                        if ((T | 0) == (U | 0)) {
                                            A = A + 4 | 0;
                                            D = R
                                        } else {
                                            S = 67;
                                            break
                                        }
                                    }
                                    do {
                                        if ((S | 0) == 67) {
                                            S = 0;
                                            V = A + ((aT(U ^ T | 0) | 0) >>> 3) | 0
                                        } else if ((S | 0) == 68) {
                                            S = 0;
                                            do {
                                                if (A >>> 0 < u >>> 0) {
                                                    G = R;
                                                    B = A;
                                                    if ((d[G] | d[G + 1 | 0] << 8) << 16 >> 16 << 16 >> 16 != (d[B] | d[B + 1 | 0] << 8) << 16 >> 16 << 16 >> 16) {
                                                        W = A;
                                                        X = R;
                                                        break
                                                    }
                                                    W = A + 2 | 0;
                                                    X = D + 6 | 0
                                                } else {
                                                    W = A;
                                                    X = R
                                                }
                                            } while (0);
                                            if (W >>> 0 >= o >>> 0) {
                                                V = W;
                                                break
                                            }
                                            V = (a[X] | 0) == (a[W] | 0) ? W + 1 | 0 : W
                                        }
                                    } while (0);
                                    A = V;
                                    D = E;
                                    B = A - D | 0;
                                    G = a[Q] | 0;
                                    if ((B | 0) > 14) {
                                        a[Q] = G + 15 & 255;
                                        H = B - 15 | 0;
                                        if ((H | 0) > 509) {
                                            F = A - 525 - D | 0;
                                            D = (F >>> 0) / 510 | 0;
                                            Y = F + (D * -510 | 0) | 0;
                                            F = D << 1;
                                            D = H;
                                            Z = C;
                                            while (1) {
                                                a[Z] = -1;
                                                a[Z + 1 | 0] = -1;
                                                _ = D - 510 | 0;
                                                if ((_ | 0) > 509) {
                                                    D = _;
                                                    Z = Z + 2 | 0
                                                } else {
                                                    break
                                                }
                                            }
                                            aa = Y;
                                            ab = O + (F + 4) | 0
                                        } else {
                                            aa = H;
                                            ab = C
                                        }
                                        if ((aa | 0) > 254) {
                                            a[ab] = -1;
                                            ac = ab + 1 | 0;
                                            ad = aa + 1 & 255
                                        } else {
                                            ac = ab;
                                            ad = aa & 255
                                        }
                                        a[ac] = ad;
                                        ae = ac + 1 | 0
                                    } else {
                                        a[Q] = (G & 255) + B & 255;
                                        ae = C
                                    }
                                    if (V >>> 0 > n >>> 0) {
                                        s = V;
                                        t = ae;
                                        break L6
                                    }
                                    Z = V - 2 | 0;
                                    D = Z;
                                    c[k + (($(d[D] | d[D + 1 | 0] << 8 | d[D + 2 | 0] << 16 | d[D + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 20 << 2) >> 2] = Z;
                                    Z = V;
                                    D = k + (($(d[Z] | d[Z + 1 | 0] << 8 | d[Z + 2 | 0] << 16 | d[Z + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 20 << 2) | 0;
                                    E = c[D >> 2] | 0;
                                    c[D >> 2] = A;
                                    if ((E + 65535 | 0) >>> 0 < V >>> 0) {
                                        break
                                    }
                                    D = E;
                                    if ((d[D] | d[D + 1 | 0] << 8 | d[D + 2 | 0] << 16 | d[D + 3 | 0] << 24 | 0) != (d[Z] | d[Z + 1 | 0] << 8 | d[Z + 2 | 0] << 16 | d[Z + 3 | 0] << 24 | 0)) {
                                        break
                                    }
                                    a[ae] = 0;
                                    N = V;
                                    O = ae + 1 | 0;
                                    P = E;
                                    Q = ae
                                }
                                E = V + 2 | 0;
                                if (E >>> 0 > n >>> 0) {
                                    s = V;
                                    t = ae;
                                    break
                                } else {
                                    w = ae;
                                    x = V;
                                    y = V;
                                    z = E
                                }
                            }
                        }
                    } while (0);
                    V = l;
                    ae = s;
                    Q = V - ae | 0;
                    if ((Q | 0) > 14) {
                        a[t] = -16;
                        P = Q - 15 | 0;
                        O = t + 1 | 0;
                        if ((P | 0) > 254) {
                            N = V - 270 - ae | 0;
                            ae = (N >>> 0) / 255 | 0;
                            V = ae + 2 | 0;
                            ac = ae + 1 | 0;
                            aR(O | 0, -1 | 0, ac | 0) | 0;
                            af = N + (ae * -255 | 0) & 255;
                            ag = t + V | 0
                        } else {
                            af = P & 255;
                            ag = O
                        }
                        a[ag] = af;
                        ah = ag
                    } else {
                        a[t] = Q << 4 & 255;
                        ah = t
                    }
                    t = ah + 1 | 0;
                    aS(t | 0, s | 0, Q) | 0;
                    q = ah + (Q + 1) - g | 0;
                    i = j;
                    return q | 0
                }
                if (p) {
                    q = 0;
                    i = j;
                    return q | 0
                }
                L72: do {
                    if ((h | 0) < 13) {
                        ai = g;
                        aj = f
                    } else {
                        p = f;
                        Q = k;
                        b[Q + (($(d[p] | d[p + 1 | 0] << 8 | d[p + 2 | 0] << 16 | d[p + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 19 << 1) >> 1] = 0;
                        if ((m | 0) < 2) {
                            ai = g;
                            aj = f;
                            break
                        }
                        p = f;
                        ah = f + (h - 8) | 0;
                        s = f + (h - 6) | 0;
                        t = f;
                        ag = g;
                        af = f;
                        O = f + 2 | 0;
                        while (1) {
                            P = af + 1 | 0;
                            V = P;
                            ae = d[V] | d[V + 1 | 0] << 8 | d[V + 2 | 0] << 16 | d[V + 3 | 0] << 24 | 0;
                            V = P;
                            P = 68;
                            N = O;
                            while (1) {
                                ac = ($(ae, -1640531535) | 0) >>> 19;
                                ad = N;
                                aa = d[ad] | d[ad + 1 | 0] << 8 | d[ad + 2 | 0] << 16 | d[ad + 3 | 0] << 24 | 0;
                                ad = Q + (ac << 1) | 0;
                                ac = e[ad >> 1] | 0;
                                ab = f + ac | 0;
                                b[ad >> 1] = V - p & 65535;
                                if ((f + (ac + 65535) | 0) >>> 0 >= V >>> 0) {
                                    ac = ab;
                                    ad = V;
                                    if ((d[ac] | d[ac + 1 | 0] << 8 | d[ac + 2 | 0] << 16 | d[ac + 3 | 0] << 24 | 0) == (d[ad] | d[ad + 1 | 0] << 8 | d[ad + 2 | 0] << 16 | d[ad + 3 | 0] << 24 | 0)) {
                                        ak = ab;
                                        al = V;
                                        break
                                    }
                                }
                                ab = N + (P >> 6) | 0;
                                if (ab >>> 0 > n >>> 0) {
                                    ai = ag;
                                    aj = t;
                                    break L72
                                } else {
                                    ae = aa;
                                    V = N;
                                    P = P + 1 | 0;
                                    N = ab
                                }
                            }
                            while (1) {
                                if (!(al >>> 0 > t >>> 0 & ak >>> 0 > f >>> 0)) {
                                    break
                                }
                                N = al - 1 | 0;
                                P = ak - 1 | 0;
                                if ((a[N] | 0) == (a[P] | 0)) {
                                    ak = P;
                                    al = N
                                } else {
                                    break
                                }
                            }
                            N = al;
                            P = t;
                            V = N - P | 0;
                            ae = ag + 1 | 0;
                            if ((V | 0) > 14) {
                                ab = V - 15 | 0;
                                a[ag] = -16;
                                if ((ab | 0) > 254) {
                                    aa = N - 270 - P | 0;
                                    P = (aa >>> 0) / 255 | 0;
                                    N = P + 1 | 0;
                                    aR(ae | 0, -1 | 0, N | 0) | 0;
                                    am = ag + (P + 2) | 0;
                                    an = aa + (P * -255 | 0) & 255
                                } else {
                                    am = ae;
                                    an = ab & 255
                                }
                                a[am] = an;
                                ao = am + 1 | 0
                            } else {
                                a[ag] = V << 4 & 255;
                                ao = ae
                            }
                            ae = ao + V | 0;
                            V = ao;
                            ab = t;
                            while (1) {
                                P = ab;
                                aa = V;
                                v = d[P] | d[P + 1 | 0] << 8 | d[P + 2 | 0] << 16 | d[P + 3 | 0] << 24 | 0;
                                a[aa] = v & 255;
                                v = v >> 8;
                                a[aa + 1 | 0] = v & 255;
                                v = v >> 8;
                                a[aa + 2 | 0] = v & 255;
                                v = v >> 8;
                                a[aa + 3 | 0] = v & 255;
                                aa = ab + 4 | 0;
                                P = V + 4 | 0;
                                v = d[aa] | d[aa + 1 | 0] << 8 | d[aa + 2 | 0] << 16 | d[aa + 3 | 0] << 24 | 0;
                                a[P] = v & 255;
                                v = v >> 8;
                                a[P + 1 | 0] = v & 255;
                                v = v >> 8;
                                a[P + 2 | 0] = v & 255;
                                v = v >> 8;
                                a[P + 3 | 0] = v & 255;
                                P = V + 8 | 0;
                                if (P >>> 0 < ae >>> 0) {
                                    V = P;
                                    ab = ab + 8 | 0
                                } else {
                                    ap = ag;
                                    aq = ak;
                                    ar = ae;
                                    as = al;
                                    break
                                }
                            }
                            while (1) {
                                ae = ar;
                                v = as - aq & 65535;
                                a[ae] = v & 255;
                                v = v >> 8;
                                a[ae + 1 | 0] = v & 255;
                                ae = ar + 2 | 0;
                                ab = as + 4 | 0;
                                V = aq;
                                P = ab;
                                while (1) {
                                    at = V + 4 | 0;
                                    if (P >>> 0 >= ah >>> 0) {
                                        S = 23;
                                        break
                                    }
                                    aa = at;
                                    au = d[aa] | d[aa + 1 | 0] << 8 | d[aa + 2 | 0] << 16 | d[aa + 3 | 0] << 24 | 0;
                                    aa = P;
                                    av = d[aa] | d[aa + 1 | 0] << 8 | d[aa + 2 | 0] << 16 | d[aa + 3 | 0] << 24 | 0;
                                    if ((au | 0) == (av | 0)) {
                                        V = at;
                                        P = P + 4 | 0
                                    } else {
                                        S = 22;
                                        break
                                    }
                                }
                                do {
                                    if ((S | 0) == 22) {
                                        S = 0;
                                        aw = P + ((aT(av ^ au | 0) | 0) >>> 3) | 0
                                    } else if ((S | 0) == 23) {
                                        S = 0;
                                        do {
                                            if (P >>> 0 < s >>> 0) {
                                                A = at;
                                                C = P;
                                                if ((d[A] | d[A + 1 | 0] << 8) << 16 >> 16 << 16 >> 16 != (d[C] | d[C + 1 | 0] << 8) << 16 >> 16 << 16 >> 16) {
                                                    ax = at;
                                                    ay = P;
                                                    break
                                                }
                                                ax = V + 6 | 0;
                                                ay = P + 2 | 0
                                            } else {
                                                ax = at;
                                                ay = P
                                            }
                                        } while (0);
                                        if (ay >>> 0 >= o >>> 0) {
                                            aw = ay;
                                            break
                                        }
                                        aw = (a[ax] | 0) == (a[ay] | 0) ? ay + 1 | 0 : ay
                                    }
                                } while (0);
                                P = aw;
                                V = ab;
                                C = P - V | 0;
                                A = a[ap] | 0;
                                if ((C | 0) > 14) {
                                    a[ap] = A + 15 & 255;
                                    B = C - 15 | 0;
                                    if ((B | 0) > 509) {
                                        G = P - 525 - V | 0;
                                        V = (G >>> 0) / 510 | 0;
                                        H = G + (V * -510 | 0) | 0;
                                        G = V << 1;
                                        V = ae;
                                        F = B;
                                        while (1) {
                                            a[V] = -1;
                                            a[V + 1 | 0] = -1;
                                            Y = F - 510 | 0;
                                            if ((Y | 0) > 509) {
                                                V = V + 2 | 0;
                                                F = Y
                                            } else {
                                                break
                                            }
                                        }
                                        az = ar + (G + 4) | 0;
                                        aA = H
                                    } else {
                                        az = ae;
                                        aA = B
                                    }
                                    if ((aA | 0) > 254) {
                                        a[az] = -1;
                                        aB = aA + 1 & 255;
                                        aC = az + 1 | 0
                                    } else {
                                        aB = aA & 255;
                                        aC = az
                                    }
                                    a[aC] = aB;
                                    aD = aC + 1 | 0
                                } else {
                                    a[ap] = (A & 255) + C & 255;
                                    aD = ae
                                }
                                if (aw >>> 0 > n >>> 0) {
                                    ai = aD;
                                    aj = aw;
                                    break L72
                                }
                                F = aw - 2 | 0;
                                V = F;
                                b[Q + (($(d[V] | d[V + 1 | 0] << 8 | d[V + 2 | 0] << 16 | d[V + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 19 << 1) >> 1] = F - p & 65535;
                                F = aw;
                                V = Q + (($(d[F] | d[F + 1 | 0] << 8 | d[F + 2 | 0] << 16 | d[F + 3 | 0] << 24 | 0, -1640531535) | 0) >>> 19 << 1) | 0;
                                ab = e[V >> 1] | 0;
                                Y = f + ab | 0;
                                b[V >> 1] = P - p & 65535;
                                if ((f + (ab + 65535) | 0) >>> 0 < aw >>> 0) {
                                    break
                                }
                                ab = Y;
                                if ((d[ab] | d[ab + 1 | 0] << 8 | d[ab + 2 | 0] << 16 | d[ab + 3 | 0] << 24 | 0) != (d[F] | d[F + 1 | 0] << 8 | d[F + 2 | 0] << 16 | d[F + 3 | 0] << 24 | 0)) {
                                    break
                                }
                                a[aD] = 0;
                                ap = aD;
                                aq = Y;
                                ar = aD + 1 | 0;
                                as = aw
                            }
                            Y = aw + 2 | 0;
                            if (Y >>> 0 > n >>> 0) {
                                ai = aD;
                                aj = aw;
                                break
                            } else {
                                t = aw;
                                ag = aD;
                                af = aw;
                                O = Y
                            }
                        }
                    }
                } while (0);
                aw = l;
                l = aj;
                aD = aw - l | 0;
                if ((aD | 0) > 14) {
                    a[ai] = -16;
                    n = aD - 15 | 0;
                    as = ai + 1 | 0;
                    if ((n | 0) > 254) {
                        ar = aw - 270 - l | 0;
                        l = (ar >>> 0) / 255 | 0;
                        aw = l + 2 | 0;
                        aq = l + 1 | 0;
                        aR(as | 0, -1 | 0, aq | 0) | 0;
                        aE = ar + (l * -255 | 0) & 255;
                        aF = ai + aw | 0
                    } else {
                        aE = n & 255;
                        aF = as
                    }
                    a[aF] = aE;
                    aG = aF
                } else {
                    a[ai] = aD << 4 & 255;
                    aG = ai
                }
                ai = aG + 1 | 0;
                aS(ai | 0, aj | 0, aD) | 0;
                q = aG + (aD + 1) - g | 0;
                i = j;
                return q | 0
            }

            function aN(b, e, f, g) {
                b = b | 0;
                e = e | 0;
                f = f | 0;
                g = g | 0;
                var h = 0,
                    i = 0,
                    j = 0,
                    k = 0,
                    l = 0,
                    m = 0,
                    n = 0,
                    o = 0,
                    p = 0,
                    q = 0,
                    r = 0,
                    s = 0,
                    t = 0,
                    u = 0,
                    w = 0,
                    x = 0,
                    y = 0,
                    z = 0,
                    A = 0,
                    B = 0,
                    C = 0,
                    D = 0,
                    E = 0,
                    F = 0,
                    G = 0,
                    H = 0,
                    I = 0,
                    J = 0,
                    K = 0,
                    L = 0,
                    M = 0,
                    N = 0,
                    O = 0,
                    P = 0,
                    Q = 0,
                    R = 0,
                    S = 0,
                    T = 0;
                h = b + f | 0;
                i = e + g | 0;
                if ((g | 0) == 0) {
                    if ((f | 0) != 1) {
                        j = -1;
                        return j | 0
                    }
                    j = ((a[b] | 0) != 0) << 31 >> 31;
                    return j | 0
                }
                k = e + (g - 12) | 0;
                l = b + (f - 8) | 0;
                m = e + (g - 8) | 0;
                n = e + (g - 5) | 0;
                g = b + (f - 6) | 0;
                f = b;
                o = e;
                L143: while (1) {
                    p = f + 1 | 0;
                    q = d[f] | 0;
                    r = q >>> 4;
                    do {
                        if ((r | 0) == 15) {
                            if (p >>> 0 < h >>> 0) {
                                s = 15;
                                t = p
                            } else {
                                u = p;
                                w = 15;
                                break
                            }
                            while (1) {
                                x = t + 1 | 0;
                                y = a[t] | 0;
                                z = (y & 255) + s | 0;
                                if (x >>> 0 < h >>> 0 & y << 24 >> 24 == -1) {
                                    s = z;
                                    t = x
                                } else {
                                    u = x;
                                    w = z;
                                    break
                                }
                            }
                        } else {
                            u = p;
                            w = r
                        }
                    } while (0);
                    A = o + w | 0;
                    B = u + w | 0;
                    if (A >>> 0 > k >>> 0 | B >>> 0 > l >>> 0) {
                        C = 106;
                        break
                    } else {
                        D = u;
                        E = o
                    }
                    while (1) {
                        r = D;
                        p = E;
                        v = d[r] | d[r + 1 | 0] << 8 | d[r + 2 | 0] << 16 | d[r + 3 | 0] << 24 | 0;
                        a[p] = v & 255;
                        v = v >> 8;
                        a[p + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[p + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[p + 3 | 0] = v & 255;
                        p = D + 4 | 0;
                        r = E + 4 | 0;
                        v = d[p] | d[p + 1 | 0] << 8 | d[p + 2 | 0] << 16 | d[p + 3 | 0] << 24 | 0;
                        a[r] = v & 255;
                        v = v >> 8;
                        a[r + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[r + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[r + 3 | 0] = v & 255;
                        F = E + 8 | 0;
                        if (F >>> 0 < A >>> 0) {
                            D = D + 8 | 0;
                            E = F
                        } else {
                            break
                        }
                    }
                    r = A;
                    p = r - F | 0;
                    z = D + (p + 8) | 0;
                    x = w - ((d[z] | d[z + 1 | 0] << 8) << 16 >> 16 & 65535) | 0;
                    z = o + x | 0;
                    y = D + (p + 10) | 0;
                    if (z >>> 0 < e >>> 0) {
                        G = y;
                        break
                    }
                    p = q & 15;
                    L154: do {
                        if ((p | 0) == 15) {
                            H = y;
                            I = 15;
                            while (1) {
                                if (H >>> 0 >= g >>> 0) {
                                    J = H;
                                    K = I;
                                    break L154
                                }
                                L = H + 1 | 0;
                                M = a[H] | 0;
                                N = (M & 255) + I | 0;
                                if (M << 24 >> 24 == -1) {
                                    H = L;
                                    I = N
                                } else {
                                    J = L;
                                    K = N;
                                    break
                                }
                            }
                        } else {
                            J = y;
                            K = p
                        }
                    } while (0);
                    if ((r - z | 0) < 4) {
                        a[A] = a[z] | 0;
                        a[o + (w + 1) | 0] = a[o + (x + 1) | 0] | 0;
                        a[o + (w + 2) | 0] = a[o + (x + 2) | 0] | 0;
                        a[o + (w + 3) | 0] = a[o + (x + 3) | 0] | 0;
                        p = o + (w + 4) | 0;
                        y = x + 4 | 0;
                        q = o + (y - (c[8 + (p - (o + y) << 2) >> 2] | 0)) | 0;
                        y = q;
                        I = p;
                        v = d[y] | d[y + 1 | 0] << 8 | d[y + 2 | 0] << 16 | d[y + 3 | 0] << 24 | 0;
                        a[I] = v & 255;
                        v = v >> 8;
                        a[I + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[I + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[I + 3 | 0] = v & 255;
                        O = q;
                        P = p
                    } else {
                        p = z;
                        q = A;
                        v = d[p] | d[p + 1 | 0] << 8 | d[p + 2 | 0] << 16 | d[p + 3 | 0] << 24 | 0;
                        a[q] = v & 255;
                        v = v >> 8;
                        a[q + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[q + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[q + 3 | 0] = v & 255;
                        O = o + (x + 4) | 0;
                        P = o + (w + 4) | 0
                    }
                    q = P + K | 0;
                    if (q >>> 0 <= m >>> 0) {
                        p = O;
                        I = P;
                        while (1) {
                            y = p;
                            H = I;
                            v = d[y] | d[y + 1 | 0] << 8 | d[y + 2 | 0] << 16 | d[y + 3 | 0] << 24 | 0;
                            a[H] = v & 255;
                            v = v >> 8;
                            a[H + 1 | 0] = v & 255;
                            v = v >> 8;
                            a[H + 2 | 0] = v & 255;
                            v = v >> 8;
                            a[H + 3 | 0] = v & 255;
                            H = p + 4 | 0;
                            y = I + 4 | 0;
                            v = d[H] | d[H + 1 | 0] << 8 | d[H + 2 | 0] << 16 | d[H + 3 | 0] << 24 | 0;
                            a[y] = v & 255;
                            v = v >> 8;
                            a[y + 1 | 0] = v & 255;
                            v = v >> 8;
                            a[y + 2 | 0] = v & 255;
                            v = v >> 8;
                            a[y + 3 | 0] = v & 255;
                            y = I + 8 | 0;
                            if (y >>> 0 < q >>> 0) {
                                p = p + 8 | 0;
                                I = y
                            } else {
                                f = J;
                                o = q;
                                continue L143
                            }
                        }
                    }
                    if (q >>> 0 > n >>> 0) {
                        G = J;
                        break
                    } else {
                        Q = O;
                        R = P
                    }
                    do {
                        I = Q;
                        p = R;
                        v = d[I] | d[I + 1 | 0] << 8 | d[I + 2 | 0] << 16 | d[I + 3 | 0] << 24 | 0;
                        a[p] = v & 255;
                        v = v >> 8;
                        a[p + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[p + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[p + 3 | 0] = v & 255;
                        p = Q + 4 | 0;
                        I = R + 4 | 0;
                        v = d[p] | d[p + 1 | 0] << 8 | d[p + 2 | 0] << 16 | d[p + 3 | 0] << 24 | 0;
                        a[I] = v & 255;
                        v = v >> 8;
                        a[I + 1 | 0] = v & 255;
                        v = v >> 8;
                        a[I + 2 | 0] = v & 255;
                        v = v >> 8;
                        a[I + 3 | 0] = v & 255;
                        R = R + 8 | 0;
                        Q = Q + 8 | 0;
                    } while (R >>> 0 < m >>> 0);
                    if (R >>> 0 < q >>> 0) {
                        S = R;
                        T = Q
                    } else {
                        f = J;
                        o = q;
                        continue
                    }
                    while (1) {
                        I = S + 1 | 0;
                        a[S] = a[T] | 0;
                        if (I >>> 0 < q >>> 0) {
                            S = I;
                            T = T + 1 | 0
                        } else {
                            f = J;
                            o = q;
                            continue L143
                        }
                    }
                }
                do {
                    if ((C | 0) == 106) {
                        if ((B | 0) != (h | 0) | A >>> 0 > i >>> 0) {
                            G = u;
                            break
                        }
                        aS(o | 0, u | 0, w) | 0;
                        j = A - e | 0;
                        return j | 0
                    }
                } while (0);
                j = b - 1 - G | 0;
                return j | 0
            }

            function aO(a, b, e) {
                a = a | 0;
                b = b | 0;
                e = e | 0;
                var f = 0,
                    g = 0,
                    h = 0,
                    i = 0,
                    j = 0,
                    k = 0,
                    l = 0,
                    m = 0,
                    n = 0,
                    o = 0,
                    p = 0,
                    q = 0,
                    r = 0,
                    s = 0,
                    t = 0,
                    u = 0,
                    v = 0,
                    w = 0,
                    x = 0,
                    y = 0,
                    z = 0,
                    A = 0,
                    B = 0,
                    C = 0,
                    D = 0,
                    E = 0,
                    F = 0,
                    G = 0,
                    H = 0;
                f = a + b | 0;
                g = (b | 0) > 15;
                if ((a & 3 | 0) == 0) {
                    if (g) {
                        h = a + (b - 16) | 0;
                        i = a;
                        j = e + 606290984 | 0;
                        k = e - 2048144777 | 0;
                        l = e;
                        m = e + 1640531535 | 0;
                        do {
                            n = i;
                            o = ($(d[n] | d[n + 1 | 0] << 8 | d[n + 2 | 0] << 16 | d[n + 3 | 0] << 24 | 0, -2048144777) | 0) + j | 0;
                            p = o << 13 | o >>> 19;
                            j = $(p, -1640531535) | 0;
                            o = i + 4 | 0;
                            n = ($(d[o] | d[o + 1 | 0] << 8 | d[o + 2 | 0] << 16 | d[o + 3 | 0] << 24 | 0, -2048144777) | 0) + k | 0;
                            q = n << 13 | n >>> 19;
                            k = $(q, -1640531535) | 0;
                            n = i + 8 | 0;
                            o = ($(d[n] | d[n + 1 | 0] << 8 | d[n + 2 | 0] << 16 | d[n + 3 | 0] << 24 | 0, -2048144777) | 0) + l | 0;
                            r = o << 13 | o >>> 19;
                            l = $(r, -1640531535) | 0;
                            o = i + 12 | 0;
                            n = ($(d[o] | d[o + 1 | 0] << 8 | d[o + 2 | 0] << 16 | d[o + 3 | 0] << 24 | 0, -2048144777) | 0) + m | 0;
                            s = n << 13 | n >>> 19;
                            m = $(s, -1640531535) | 0;
                            i = i + 16 | 0;
                        } while (i >>> 0 <= h >>> 0);
                        t = i;
                        u = (k >>> 25 | ($(q, 465361024) | 0)) + (j >>> 31 | ($(p, 1013904226) | 0)) + (l >>> 20 | ($(r, 2006650880) | 0)) + (m >>> 14 | ($(s, -423362560) | 0)) | 0
                    } else {
                        t = a;
                        u = e + 374761393 | 0
                    }
                    s = u + b | 0;
                    u = a + (b - 4) | 0;
                    if (t >>> 0 > u >>> 0) {
                        v = s;
                        w = t
                    } else {
                        m = s;
                        s = t;
                        while (1) {
                            t = s;
                            r = ($(d[t] | d[t + 1 | 0] << 8 | d[t + 2 | 0] << 16 | d[t + 3 | 0] << 24 | 0, -1028477379) | 0) + m | 0;
                            t = $(r << 17 | r >>> 15, 668265263) | 0;
                            r = s + 4 | 0;
                            if (r >>> 0 > u >>> 0) {
                                v = t;
                                w = r;
                                break
                            } else {
                                m = t;
                                s = r
                            }
                        }
                    }
                    if (w >>> 0 < f >>> 0) {
                        s = v;
                        m = w;
                        while (1) {
                            w = ($(d[m] | 0, 374761393) | 0) + s | 0;
                            u = $(w << 11 | w >>> 21, -1640531535) | 0;
                            w = m + 1 | 0;
                            if (w >>> 0 < f >>> 0) {
                                s = u;
                                m = w
                            } else {
                                x = u;
                                break
                            }
                        }
                    } else {
                        x = v
                    }
                    v = $(x >>> 15 ^ x, -2048144777) | 0;
                    x = $(v >>> 13 ^ v, -1028477379) | 0;
                    y = x >>> 16 ^ x;
                    return y | 0
                } else {
                    if (g) {
                        g = a + (b - 16) | 0;
                        x = e + 1640531535 | 0;
                        v = e;
                        m = e - 2048144777 | 0;
                        s = e + 606290984 | 0;
                        u = a;
                        do {
                            w = ($(c[u >> 2] | 0, -2048144777) | 0) + s | 0;
                            z = w << 13 | w >>> 19;
                            s = $(z, -1640531535) | 0;
                            w = ($(c[u + 4 >> 2] | 0, -2048144777) | 0) + m | 0;
                            A = w << 13 | w >>> 19;
                            m = $(A, -1640531535) | 0;
                            w = ($(c[u + 8 >> 2] | 0, -2048144777) | 0) + v | 0;
                            B = w << 13 | w >>> 19;
                            v = $(B, -1640531535) | 0;
                            w = ($(c[u + 12 >> 2] | 0, -2048144777) | 0) + x | 0;
                            C = w << 13 | w >>> 19;
                            x = $(C, -1640531535) | 0;
                            u = u + 16 | 0;
                        } while (u >>> 0 <= g >>> 0);
                        D = (m >>> 25 | ($(A, 465361024) | 0)) + (s >>> 31 | ($(z, 1013904226) | 0)) + (v >>> 20 | ($(B, 2006650880) | 0)) + (x >>> 14 | ($(C, -423362560) | 0)) | 0;
                        E = u
                    } else {
                        D = e + 374761393 | 0;
                        E = a
                    }
                    e = D + b | 0;
                    D = a + (b - 4) | 0;
                    if (E >>> 0 > D >>> 0) {
                        F = E;
                        G = e
                    } else {
                        b = E;
                        E = e;
                        while (1) {
                            e = ($(c[b >> 2] | 0, -1028477379) | 0) + E | 0;
                            a = $(e << 17 | e >>> 15, 668265263) | 0;
                            e = b + 4 | 0;
                            if (e >>> 0 > D >>> 0) {
                                F = e;
                                G = a;
                                break
                            } else {
                                b = e;
                                E = a
                            }
                        }
                    }
                    if (F >>> 0 < f >>> 0) {
                        E = F;
                        F = G;
                        while (1) {
                            b = ($(d[E] | 0, 374761393) | 0) + F | 0;
                            D = $(b << 11 | b >>> 21, -1640531535) | 0;
                            b = E + 1 | 0;
                            if (b >>> 0 < f >>> 0) {
                                E = b;
                                F = D
                            } else {
                                H = D;
                                break
                            }
                        }
                    } else {
                        H = G
                    }
                    G = $(H >>> 15 ^ H, -2048144777) | 0;
                    H = $(G >>> 13 ^ G, -1028477379) | 0;
                    y = H >>> 16 ^ H;
                    return y | 0
                }
                return 0
            }

            function aP(a) {
                a = a | 0;
                var b = 0,
                    d = 0,
                    e = 0,
                    f = 0,
                    g = 0,
                    h = 0,
                    i = 0,
                    j = 0,
                    k = 0,
                    l = 0,
                    m = 0,
                    n = 0,
                    o = 0,
                    p = 0,
                    q = 0,
                    r = 0,
                    s = 0,
                    t = 0,
                    u = 0,
                    v = 0,
                    w = 0,
                    x = 0,
                    y = 0,
                    z = 0,
                    A = 0,
                    B = 0,
                    C = 0,
                    D = 0,
                    E = 0,
                    F = 0,
                    G = 0,
                    H = 0,
                    I = 0,
                    J = 0,
                    K = 0,
                    L = 0,
                    M = 0,
                    N = 0,
                    O = 0,
                    P = 0,
                    Q = 0,
                    R = 0,
                    S = 0,
                    T = 0,
                    U = 0,
                    V = 0,
                    W = 0,
                    X = 0,
                    Y = 0,
                    Z = 0,
                    _ = 0,
                    $ = 0,
                    aa = 0,
                    ab = 0,
                    ac = 0,
                    ad = 0,
                    ae = 0,
                    af = 0,
                    ag = 0,
                    ah = 0,
                    ai = 0,
                    al = 0,
                    ap = 0,
                    aq = 0,
                    ar = 0,
                    as = 0,
                    at = 0,
                    au = 0,
                    av = 0,
                    aw = 0,
                    ax = 0,
                    ay = 0,
                    az = 0,
                    aA = 0,
                    aB = 0,
                    aC = 0,
                    aD = 0,
                    aE = 0,
                    aF = 0,
                    aG = 0,
                    aH = 0,
                    aI = 0,
                    aJ = 0,
                    aK = 0,
                    aL = 0;
                do {
                    if (a >>> 0 < 245 >>> 0) {
                        if (a >>> 0 < 11 >>> 0) {
                            b = 16
                        } else {
                            b = a + 11 & -8
                        }
                        d = b >>> 3;
                        e = c[16] | 0;
                        f = e >>> (d >>> 0);
                        if ((f & 3 | 0) != 0) {
                            g = (f & 1 ^ 1) + d | 0;
                            h = g << 1;
                            i = 104 + (h << 2) | 0;
                            j = 104 + (h + 2 << 2) | 0;
                            h = c[j >> 2] | 0;
                            k = h + 8 | 0;
                            l = c[k >> 2] | 0;
                            do {
                                if ((i | 0) == (l | 0)) {
                                    c[16] = e & ~(1 << g)
                                } else {
                                    if (l >>> 0 < (c[20] | 0) >>> 0) {
                                        an();
                                        return 0
                                    }
                                    m = l + 12 | 0;
                                    if ((c[m >> 2] | 0) == (h | 0)) {
                                        c[m >> 2] = i;
                                        c[j >> 2] = l;
                                        break
                                    } else {
                                        an();
                                        return 0
                                    }
                                }
                            } while (0);
                            l = g << 3;
                            c[h + 4 >> 2] = l | 3;
                            j = h + (l | 4) | 0;
                            c[j >> 2] = c[j >> 2] | 1;
                            n = k;
                            return n | 0
                        }
                        if (b >>> 0 <= (c[18] | 0) >>> 0) {
                            o = b;
                            break
                        }
                        if ((f | 0) != 0) {
                            j = 2 << d;
                            l = f << d & (j | -j);
                            j = (l & -l) - 1 | 0;
                            l = j >>> 12 & 16;
                            i = j >>> (l >>> 0);
                            j = i >>> 5 & 8;
                            m = i >>> (j >>> 0);
                            i = m >>> 2 & 4;
                            p = m >>> (i >>> 0);
                            m = p >>> 1 & 2;
                            q = p >>> (m >>> 0);
                            p = q >>> 1 & 1;
                            r = (j | l | i | m | p) + (q >>> (p >>> 0)) | 0;
                            p = r << 1;
                            q = 104 + (p << 2) | 0;
                            m = 104 + (p + 2 << 2) | 0;
                            p = c[m >> 2] | 0;
                            i = p + 8 | 0;
                            l = c[i >> 2] | 0;
                            do {
                                if ((q | 0) == (l | 0)) {
                                    c[16] = e & ~(1 << r)
                                } else {
                                    if (l >>> 0 < (c[20] | 0) >>> 0) {
                                        an();
                                        return 0
                                    }
                                    j = l + 12 | 0;
                                    if ((c[j >> 2] | 0) == (p | 0)) {
                                        c[j >> 2] = q;
                                        c[m >> 2] = l;
                                        break
                                    } else {
                                        an();
                                        return 0
                                    }
                                }
                            } while (0);
                            l = r << 3;
                            m = l - b | 0;
                            c[p + 4 >> 2] = b | 3;
                            q = p;
                            e = q + b | 0;
                            c[q + (b | 4) >> 2] = m | 1;
                            c[q + l >> 2] = m;
                            l = c[18] | 0;
                            if ((l | 0) != 0) {
                                q = c[21] | 0;
                                d = l >>> 3;
                                l = d << 1;
                                f = 104 + (l << 2) | 0;
                                k = c[16] | 0;
                                h = 1 << d;
                                do {
                                    if ((k & h | 0) == 0) {
                                        c[16] = k | h;
                                        s = f;
                                        t = 104 + (l + 2 << 2) | 0
                                    } else {
                                        d = 104 + (l + 2 << 2) | 0;
                                        g = c[d >> 2] | 0;
                                        if (g >>> 0 >= (c[20] | 0) >>> 0) {
                                            s = g;
                                            t = d;
                                            break
                                        }
                                        an();
                                        return 0
                                    }
                                } while (0);
                                c[t >> 2] = q;
                                c[s + 12 >> 2] = q;
                                c[q + 8 >> 2] = s;
                                c[q + 12 >> 2] = f
                            }
                            c[18] = m;
                            c[21] = e;
                            n = i;
                            return n | 0
                        }
                        l = c[17] | 0;
                        if ((l | 0) == 0) {
                            o = b;
                            break
                        }
                        h = (l & -l) - 1 | 0;
                        l = h >>> 12 & 16;
                        k = h >>> (l >>> 0);
                        h = k >>> 5 & 8;
                        p = k >>> (h >>> 0);
                        k = p >>> 2 & 4;
                        r = p >>> (k >>> 0);
                        p = r >>> 1 & 2;
                        d = r >>> (p >>> 0);
                        r = d >>> 1 & 1;
                        g = c[368 + ((h | l | k | p | r) + (d >>> (r >>> 0)) << 2) >> 2] | 0;
                        r = g;
                        d = g;
                        p = (c[g + 4 >> 2] & -8) - b | 0;
                        while (1) {
                            g = c[r + 16 >> 2] | 0;
                            if ((g | 0) == 0) {
                                k = c[r + 20 >> 2] | 0;
                                if ((k | 0) == 0) {
                                    break
                                } else {
                                    u = k
                                }
                            } else {
                                u = g
                            }
                            g = (c[u + 4 >> 2] & -8) - b | 0;
                            k = g >>> 0 < p >>> 0;
                            r = u;
                            d = k ? u : d;
                            p = k ? g : p
                        }
                        r = d;
                        i = c[20] | 0;
                        if (r >>> 0 < i >>> 0) {
                            an();
                            return 0
                        }
                        e = r + b | 0;
                        m = e;
                        if (r >>> 0 >= e >>> 0) {
                            an();
                            return 0
                        }
                        e = c[d + 24 >> 2] | 0;
                        f = c[d + 12 >> 2] | 0;
                        do {
                            if ((f | 0) == (d | 0)) {
                                q = d + 20 | 0;
                                g = c[q >> 2] | 0;
                                if ((g | 0) == 0) {
                                    k = d + 16 | 0;
                                    l = c[k >> 2] | 0;
                                    if ((l | 0) == 0) {
                                        v = 0;
                                        break
                                    } else {
                                        w = l;
                                        x = k
                                    }
                                } else {
                                    w = g;
                                    x = q
                                }
                                while (1) {
                                    q = w + 20 | 0;
                                    g = c[q >> 2] | 0;
                                    if ((g | 0) != 0) {
                                        w = g;
                                        x = q;
                                        continue
                                    }
                                    q = w + 16 | 0;
                                    g = c[q >> 2] | 0;
                                    if ((g | 0) == 0) {
                                        break
                                    } else {
                                        w = g;
                                        x = q
                                    }
                                }
                                if (x >>> 0 < i >>> 0) {
                                    an();
                                    return 0
                                } else {
                                    c[x >> 2] = 0;
                                    v = w;
                                    break
                                }
                            } else {
                                q = c[d + 8 >> 2] | 0;
                                if (q >>> 0 < i >>> 0) {
                                    an();
                                    return 0
                                }
                                g = q + 12 | 0;
                                if ((c[g >> 2] | 0) != (d | 0)) {
                                    an();
                                    return 0
                                }
                                k = f + 8 | 0;
                                if ((c[k >> 2] | 0) == (d | 0)) {
                                    c[g >> 2] = f;
                                    c[k >> 2] = q;
                                    v = f;
                                    break
                                } else {
                                    an();
                                    return 0
                                }
                            }
                        } while (0);
                        L292: do {
                            if ((e | 0) != 0) {
                                f = d + 28 | 0;
                                i = 368 + (c[f >> 2] << 2) | 0;
                                do {
                                    if ((d | 0) == (c[i >> 2] | 0)) {
                                        c[i >> 2] = v;
                                        if ((v | 0) != 0) {
                                            break
                                        }
                                        c[17] = c[17] & ~(1 << c[f >> 2]);
                                        break L292
                                    } else {
                                        if (e >>> 0 < (c[20] | 0) >>> 0) {
                                            an();
                                            return 0
                                        }
                                        q = e + 16 | 0;
                                        if ((c[q >> 2] | 0) == (d | 0)) {
                                            c[q >> 2] = v
                                        } else {
                                            c[e + 20 >> 2] = v
                                        }
                                        if ((v | 0) == 0) {
                                            break L292
                                        }
                                    }
                                } while (0);
                                if (v >>> 0 < (c[20] | 0) >>> 0) {
                                    an();
                                    return 0
                                }
                                c[v + 24 >> 2] = e;
                                f = c[d + 16 >> 2] | 0;
                                do {
                                    if ((f | 0) != 0) {
                                        if (f >>> 0 < (c[20] | 0) >>> 0) {
                                            an();
                                            return 0
                                        } else {
                                            c[v + 16 >> 2] = f;
                                            c[f + 24 >> 2] = v;
                                            break
                                        }
                                    }
                                } while (0);
                                f = c[d + 20 >> 2] | 0;
                                if ((f | 0) == 0) {
                                    break
                                }
                                if (f >>> 0 < (c[20] | 0) >>> 0) {
                                    an();
                                    return 0
                                } else {
                                    c[v + 20 >> 2] = f;
                                    c[f + 24 >> 2] = v;
                                    break
                                }
                            }
                        } while (0);
                        if (p >>> 0 < 16 >>> 0) {
                            e = p + b | 0;
                            c[d + 4 >> 2] = e | 3;
                            f = r + (e + 4) | 0;
                            c[f >> 2] = c[f >> 2] | 1
                        } else {
                            c[d + 4 >> 2] = b | 3;
                            c[r + (b | 4) >> 2] = p | 1;
                            c[r + (p + b) >> 2] = p;
                            f = c[18] | 0;
                            if ((f | 0) != 0) {
                                e = c[21] | 0;
                                i = f >>> 3;
                                f = i << 1;
                                q = 104 + (f << 2) | 0;
                                k = c[16] | 0;
                                g = 1 << i;
                                do {
                                    if ((k & g | 0) == 0) {
                                        c[16] = k | g;
                                        y = q;
                                        z = 104 + (f + 2 << 2) | 0
                                    } else {
                                        i = 104 + (f + 2 << 2) | 0;
                                        l = c[i >> 2] | 0;
                                        if (l >>> 0 >= (c[20] | 0) >>> 0) {
                                            y = l;
                                            z = i;
                                            break
                                        }
                                        an();
                                        return 0
                                    }
                                } while (0);
                                c[z >> 2] = e;
                                c[y + 12 >> 2] = e;
                                c[e + 8 >> 2] = y;
                                c[e + 12 >> 2] = q
                            }
                            c[18] = p;
                            c[21] = m
                        }
                        f = d + 8 | 0;
                        if ((f | 0) == 0) {
                            o = b;
                            break
                        } else {
                            n = f
                        }
                        return n | 0
                    } else {
                        if (a >>> 0 > 4294967231 >>> 0) {
                            o = -1;
                            break
                        }
                        f = a + 11 | 0;
                        g = f & -8;
                        k = c[17] | 0;
                        if ((k | 0) == 0) {
                            o = g;
                            break
                        }
                        r = -g | 0;
                        i = f >>> 8;
                        do {
                            if ((i | 0) == 0) {
                                A = 0
                            } else {
                                if (g >>> 0 > 16777215 >>> 0) {
                                    A = 31;
                                    break
                                }
                                f = (i + 1048320 | 0) >>> 16 & 8;
                                l = i << f;
                                h = (l + 520192 | 0) >>> 16 & 4;
                                j = l << h;
                                l = (j + 245760 | 0) >>> 16 & 2;
                                B = 14 - (h | f | l) + (j << l >>> 15) | 0;
                                A = g >>> ((B + 7 | 0) >>> 0) & 1 | B << 1
                            }
                        } while (0);
                        i = c[368 + (A << 2) >> 2] | 0;
                        L340: do {
                            if ((i | 0) == 0) {
                                C = 0;
                                D = r;
                                E = 0
                            } else {
                                if ((A | 0) == 31) {
                                    F = 0
                                } else {
                                    F = 25 - (A >>> 1) | 0
                                }
                                d = 0;
                                m = r;
                                p = i;
                                q = g << F;
                                e = 0;
                                while (1) {
                                    B = c[p + 4 >> 2] & -8;
                                    l = B - g | 0;
                                    if (l >>> 0 < m >>> 0) {
                                        if ((B | 0) == (g | 0)) {
                                            C = p;
                                            D = l;
                                            E = p;
                                            break L340
                                        } else {
                                            G = p;
                                            H = l
                                        }
                                    } else {
                                        G = d;
                                        H = m
                                    }
                                    l = c[p + 20 >> 2] | 0;
                                    B = c[p + 16 + (q >>> 31 << 2) >> 2] | 0;
                                    j = (l | 0) == 0 | (l | 0) == (B | 0) ? e : l;
                                    if ((B | 0) == 0) {
                                        C = G;
                                        D = H;
                                        E = j;
                                        break
                                    } else {
                                        d = G;
                                        m = H;
                                        p = B;
                                        q = q << 1;
                                        e = j
                                    }
                                }
                            }
                        } while (0);
                        if ((E | 0) == 0 & (C | 0) == 0) {
                            i = 2 << A;
                            r = k & (i | -i);
                            if ((r | 0) == 0) {
                                o = g;
                                break
                            }
                            i = (r & -r) - 1 | 0;
                            r = i >>> 12 & 16;
                            e = i >>> (r >>> 0);
                            i = e >>> 5 & 8;
                            q = e >>> (i >>> 0);
                            e = q >>> 2 & 4;
                            p = q >>> (e >>> 0);
                            q = p >>> 1 & 2;
                            m = p >>> (q >>> 0);
                            p = m >>> 1 & 1;
                            I = c[368 + ((i | r | e | q | p) + (m >>> (p >>> 0)) << 2) >> 2] | 0
                        } else {
                            I = E
                        }
                        if ((I | 0) == 0) {
                            J = D;
                            K = C
                        } else {
                            p = I;
                            m = D;
                            q = C;
                            while (1) {
                                e = (c[p + 4 >> 2] & -8) - g | 0;
                                r = e >>> 0 < m >>> 0;
                                i = r ? e : m;
                                e = r ? p : q;
                                r = c[p + 16 >> 2] | 0;
                                if ((r | 0) != 0) {
                                    p = r;
                                    m = i;
                                    q = e;
                                    continue
                                }
                                r = c[p + 20 >> 2] | 0;
                                if ((r | 0) == 0) {
                                    J = i;
                                    K = e;
                                    break
                                } else {
                                    p = r;
                                    m = i;
                                    q = e
                                }
                            }
                        }
                        if ((K | 0) == 0) {
                            o = g;
                            break
                        }
                        if (J >>> 0 >= ((c[18] | 0) - g | 0) >>> 0) {
                            o = g;
                            break
                        }
                        q = K;
                        m = c[20] | 0;
                        if (q >>> 0 < m >>> 0) {
                            an();
                            return 0
                        }
                        p = q + g | 0;
                        k = p;
                        if (q >>> 0 >= p >>> 0) {
                            an();
                            return 0
                        }
                        e = c[K + 24 >> 2] | 0;
                        i = c[K + 12 >> 2] | 0;
                        do {
                            if ((i | 0) == (K | 0)) {
                                r = K + 20 | 0;
                                d = c[r >> 2] | 0;
                                if ((d | 0) == 0) {
                                    j = K + 16 | 0;
                                    B = c[j >> 2] | 0;
                                    if ((B | 0) == 0) {
                                        L = 0;
                                        break
                                    } else {
                                        M = B;
                                        N = j
                                    }
                                } else {
                                    M = d;
                                    N = r
                                }
                                while (1) {
                                    r = M + 20 | 0;
                                    d = c[r >> 2] | 0;
                                    if ((d | 0) != 0) {
                                        M = d;
                                        N = r;
                                        continue
                                    }
                                    r = M + 16 | 0;
                                    d = c[r >> 2] | 0;
                                    if ((d | 0) == 0) {
                                        break
                                    } else {
                                        M = d;
                                        N = r
                                    }
                                }
                                if (N >>> 0 < m >>> 0) {
                                    an();
                                    return 0
                                } else {
                                    c[N >> 2] = 0;
                                    L = M;
                                    break
                                }
                            } else {
                                r = c[K + 8 >> 2] | 0;
                                if (r >>> 0 < m >>> 0) {
                                    an();
                                    return 0
                                }
                                d = r + 12 | 0;
                                if ((c[d >> 2] | 0) != (K | 0)) {
                                    an();
                                    return 0
                                }
                                j = i + 8 | 0;
                                if ((c[j >> 2] | 0) == (K | 0)) {
                                    c[d >> 2] = i;
                                    c[j >> 2] = r;
                                    L = i;
                                    break
                                } else {
                                    an();
                                    return 0
                                }
                            }
                        } while (0);
                        L390: do {
                            if ((e | 0) != 0) {
                                i = K + 28 | 0;
                                m = 368 + (c[i >> 2] << 2) | 0;
                                do {
                                    if ((K | 0) == (c[m >> 2] | 0)) {
                                        c[m >> 2] = L;
                                        if ((L | 0) != 0) {
                                            break
                                        }
                                        c[17] = c[17] & ~(1 << c[i >> 2]);
                                        break L390
                                    } else {
                                        if (e >>> 0 < (c[20] | 0) >>> 0) {
                                            an();
                                            return 0
                                        }
                                        r = e + 16 | 0;
                                        if ((c[r >> 2] | 0) == (K | 0)) {
                                            c[r >> 2] = L
                                        } else {
                                            c[e + 20 >> 2] = L
                                        }
                                        if ((L | 0) == 0) {
                                            break L390
                                        }
                                    }
                                } while (0);
                                if (L >>> 0 < (c[20] | 0) >>> 0) {
                                    an();
                                    return 0
                                }
                                c[L + 24 >> 2] = e;
                                i = c[K + 16 >> 2] | 0;
                                do {
                                    if ((i | 0) != 0) {
                                        if (i >>> 0 < (c[20] | 0) >>> 0) {
                                            an();
                                            return 0
                                        } else {
                                            c[L + 16 >> 2] = i;
                                            c[i + 24 >> 2] = L;
                                            break
                                        }
                                    }
                                } while (0);
                                i = c[K + 20 >> 2] | 0;
                                if ((i | 0) == 0) {
                                    break
                                }
                                if (i >>> 0 < (c[20] | 0) >>> 0) {
                                    an();
                                    return 0
                                } else {
                                    c[L + 20 >> 2] = i;
                                    c[i + 24 >> 2] = L;
                                    break
                                }
                            }
                        } while (0);
                        do {
                            if (J >>> 0 < 16 >>> 0) {
                                e = J + g | 0;
                                c[K + 4 >> 2] = e | 3;
                                i = q + (e + 4) | 0;
                                c[i >> 2] = c[i >> 2] | 1
                            } else {
                                c[K + 4 >> 2] = g | 3;
                                c[q + (g | 4) >> 2] = J | 1;
                                c[q + (J + g) >> 2] = J;
                                i = J >>> 3;
                                if (J >>> 0 < 256 >>> 0) {
                                    e = i << 1;
                                    m = 104 + (e << 2) | 0;
                                    r = c[16] | 0;
                                    j = 1 << i;
                                    do {
                                        if ((r & j | 0) == 0) {
                                            c[16] = r | j;
                                            O = m;
                                            P = 104 + (e + 2 << 2) | 0
                                        } else {
                                            i = 104 + (e + 2 << 2) | 0;
                                            d = c[i >> 2] | 0;
                                            if (d >>> 0 >= (c[20] | 0) >>> 0) {
                                                O = d;
                                                P = i;
                                                break
                                            }
                                            an();
                                            return 0
                                        }
                                    } while (0);
                                    c[P >> 2] = k;
                                    c[O + 12 >> 2] = k;
                                    c[q + (g + 8) >> 2] = O;
                                    c[q + (g + 12) >> 2] = m;
                                    break
                                }
                                e = p;
                                j = J >>> 8;
                                do {
                                    if ((j | 0) == 0) {
                                        Q = 0
                                    } else {
                                        if (J >>> 0 > 16777215 >>> 0) {
                                            Q = 31;
                                            break
                                        }
                                        r = (j + 1048320 | 0) >>> 16 & 8;
                                        i = j << r;
                                        d = (i + 520192 | 0) >>> 16 & 4;
                                        B = i << d;
                                        i = (B + 245760 | 0) >>> 16 & 2;
                                        l = 14 - (d | r | i) + (B << i >>> 15) | 0;
                                        Q = J >>> ((l + 7 | 0) >>> 0) & 1 | l << 1
                                    }
                                } while (0);
                                j = 368 + (Q << 2) | 0;
                                c[q + (g + 28) >> 2] = Q;
                                c[q + (g + 20) >> 2] = 0;
                                c[q + (g + 16) >> 2] = 0;
                                m = c[17] | 0;
                                l = 1 << Q;
                                if ((m & l | 0) == 0) {
                                    c[17] = m | l;
                                    c[j >> 2] = e;
                                    c[q + (g + 24) >> 2] = j;
                                    c[q + (g + 12) >> 2] = e;
                                    c[q + (g + 8) >> 2] = e;
                                    break
                                }
                                if ((Q | 0) == 31) {
                                    R = 0
                                } else {
                                    R = 25 - (Q >>> 1) | 0
                                }
                                l = J << R;
                                m = c[j >> 2] | 0;
                                while (1) {
                                    if ((c[m + 4 >> 2] & -8 | 0) == (J | 0)) {
                                        break
                                    }
                                    S = m + 16 + (l >>> 31 << 2) | 0;
                                    j = c[S >> 2] | 0;
                                    if ((j | 0) == 0) {
                                        T = 302;
                                        break
                                    } else {
                                        l = l << 1;
                                        m = j
                                    }
                                }
                                if ((T | 0) == 302) {
                                    if (S >>> 0 < (c[20] | 0) >>> 0) {
                                        an();
                                        return 0
                                    } else {
                                        c[S >> 2] = e;
                                        c[q + (g + 24) >> 2] = m;
                                        c[q + (g + 12) >> 2] = e;
                                        c[q + (g + 8) >> 2] = e;
                                        break
                                    }
                                }
                                l = m + 8 | 0;
                                j = c[l >> 2] | 0;
                                i = c[20] | 0;
                                if (m >>> 0 < i >>> 0) {
                                    an();
                                    return 0
                                }
                                if (j >>> 0 < i >>> 0) {
                                    an();
                                    return 0
                                } else {
                                    c[j + 12 >> 2] = e;
                                    c[l >> 2] = e;
                                    c[q + (g + 8) >> 2] = j;
                                    c[q + (g + 12) >> 2] = m;
                                    c[q + (g + 24) >> 2] = 0;
                                    break
                                }
                            }
                        } while (0);
                        q = K + 8 | 0;
                        if ((q | 0) == 0) {
                            o = g;
                            break
                        } else {
                            n = q
                        }
                        return n | 0
                    }
                } while (0);
                K = c[18] | 0;
                if (o >>> 0 <= K >>> 0) {
                    S = K - o | 0;
                    J = c[21] | 0;
                    if (S >>> 0 > 15 >>> 0) {
                        R = J;
                        c[21] = R + o;
                        c[18] = S;
                        c[R + (o + 4) >> 2] = S | 1;
                        c[R + K >> 2] = S;
                        c[J + 4 >> 2] = o | 3
                    } else {
                        c[18] = 0;
                        c[21] = 0;
                        c[J + 4 >> 2] = K | 3;
                        S = J + (K + 4) | 0;
                        c[S >> 2] = c[S >> 2] | 1
                    }
                    n = J + 8 | 0;
                    return n | 0
                }
                J = c[19] | 0;
                if (o >>> 0 < J >>> 0) {
                    S = J - o | 0;
                    c[19] = S;
                    J = c[22] | 0;
                    K = J;
                    c[22] = K + o;
                    c[K + (o + 4) >> 2] = S | 1;
                    c[J + 4 >> 2] = o | 3;
                    n = J + 8 | 0;
                    return n | 0
                }
                do {
                    if ((c[10] | 0) == 0) {
                        J = aj(30) | 0;
                        if ((J - 1 & J | 0) == 0) {
                            c[12] = J;
                            c[11] = J;
                            c[13] = -1;
                            c[14] = -1;
                            c[15] = 0;
                            c[127] = 0;
                            c[10] = (ao(0) | 0) & -16 ^ 1431655768;
                            break
                        } else {
                            an();
                            return 0
                        }
                    }
                } while (0);
                J = o + 48 | 0;
                S = c[12] | 0;
                K = o + 47 | 0;
                R = S + K | 0;
                Q = -S | 0;
                S = R & Q;
                if (S >>> 0 <= o >>> 0) {
                    n = 0;
                    return n | 0
                }
                O = c[126] | 0;
                do {
                    if ((O | 0) != 0) {
                        P = c[124] | 0;
                        L = P + S | 0;
                        if (L >>> 0 <= P >>> 0 | L >>> 0 > O >>> 0) {
                            n = 0
                        } else {
                            break
                        }
                        return n | 0
                    }
                } while (0);
                L482: do {
                    if ((c[127] & 4 | 0) == 0) {
                        O = c[22] | 0;
                        L484: do {
                            if ((O | 0) == 0) {
                                T = 332
                            } else {
                                L = O;
                                P = 512;
                                while (1) {
                                    U = P | 0;
                                    M = c[U >> 2] | 0;
                                    if (M >>> 0 <= L >>> 0) {
                                        V = P + 4 | 0;
                                        if ((M + (c[V >> 2] | 0) | 0) >>> 0 > L >>> 0) {
                                            break
                                        }
                                    }
                                    M = c[P + 8 >> 2] | 0;
                                    if ((M | 0) == 0) {
                                        T = 332;
                                        break L484
                                    } else {
                                        P = M
                                    }
                                }
                                if ((P | 0) == 0) {
                                    T = 332;
                                    break
                                }
                                L = R - (c[19] | 0) & Q;
                                if (L >>> 0 >= 2147483647 >>> 0) {
                                    W = 0;
                                    break
                                }
                                m = ak(L | 0) | 0;
                                e = (m | 0) == ((c[U >> 2] | 0) + (c[V >> 2] | 0) | 0);
                                X = e ? m : -1;
                                Y = e ? L : 0;
                                Z = m;
                                _ = L;
                                T = 341
                            }
                        } while (0);
                        do {
                            if ((T | 0) == 332) {
                                O = ak(0) | 0;
                                if ((O | 0) == -1) {
                                    W = 0;
                                    break
                                }
                                g = O;
                                L = c[11] | 0;
                                m = L - 1 | 0;
                                if ((m & g | 0) == 0) {
                                    $ = S
                                } else {
                                    $ = S - g + (m + g & -L) | 0
                                }
                                L = c[124] | 0;
                                g = L + $ | 0;
                                if (!($ >>> 0 > o >>> 0 & $ >>> 0 < 2147483647 >>> 0)) {
                                    W = 0;
                                    break
                                }
                                m = c[126] | 0;
                                if ((m | 0) != 0) {
                                    if (g >>> 0 <= L >>> 0 | g >>> 0 > m >>> 0) {
                                        W = 0;
                                        break
                                    }
                                }
                                m = ak($ | 0) | 0;
                                g = (m | 0) == (O | 0);
                                X = g ? O : -1;
                                Y = g ? $ : 0;
                                Z = m;
                                _ = $;
                                T = 341
                            }
                        } while (0);
                        L504: do {
                            if ((T | 0) == 341) {
                                m = -_ | 0;
                                if ((X | 0) != -1) {
                                    aa = Y;
                                    ab = X;
                                    T = 352;
                                    break L482
                                }
                                do {
                                    if ((Z | 0) != -1 & _ >>> 0 < 2147483647 >>> 0 & _ >>> 0 < J >>> 0) {
                                        g = c[12] | 0;
                                        O = K - _ + g & -g;
                                        if (O >>> 0 >= 2147483647 >>> 0) {
                                            ac = _;
                                            break
                                        }
                                        if ((ak(O | 0) | 0) == -1) {
                                            ak(m | 0) | 0;
                                            W = Y;
                                            break L504
                                        } else {
                                            ac = O + _ | 0;
                                            break
                                        }
                                    } else {
                                        ac = _
                                    }
                                } while (0);
                                if ((Z | 0) == -1) {
                                    W = Y
                                } else {
                                    aa = ac;
                                    ab = Z;
                                    T = 352;
                                    break L482
                                }
                            }
                        } while (0);
                        c[127] = c[127] | 4;
                        ad = W;
                        T = 349
                    } else {
                        ad = 0;
                        T = 349
                    }
                } while (0);
                do {
                    if ((T | 0) == 349) {
                        if (S >>> 0 >= 2147483647 >>> 0) {
                            break
                        }
                        W = ak(S | 0) | 0;
                        Z = ak(0) | 0;
                        if (!((Z | 0) != -1 & (W | 0) != -1 & W >>> 0 < Z >>> 0)) {
                            break
                        }
                        ac = Z - W | 0;
                        Z = ac >>> 0 > (o + 40 | 0) >>> 0;
                        Y = Z ? W : -1;
                        if ((Y | 0) != -1) {
                            aa = Z ? ac : ad;
                            ab = Y;
                            T = 352
                        }
                    }
                } while (0);
                do {
                    if ((T | 0) == 352) {
                        ad = (c[124] | 0) + aa | 0;
                        c[124] = ad;
                        if (ad >>> 0 > (c[125] | 0) >>> 0) {
                            c[125] = ad
                        }
                        ad = c[22] | 0;
                        L524: do {
                            if ((ad | 0) == 0) {
                                S = c[20] | 0;
                                if ((S | 0) == 0 | ab >>> 0 < S >>> 0) {
                                    c[20] = ab
                                }
                                c[128] = ab;
                                c[129] = aa;
                                c[131] = 0;
                                c[25] = c[10];
                                c[24] = -1;
                                S = 0;
                                do {
                                    Y = S << 1;
                                    ac = 104 + (Y << 2) | 0;
                                    c[104 + (Y + 3 << 2) >> 2] = ac;
                                    c[104 + (Y + 2 << 2) >> 2] = ac;
                                    S = S + 1 | 0;
                                } while (S >>> 0 < 32 >>> 0);
                                S = ab + 8 | 0;
                                if ((S & 7 | 0) == 0) {
                                    ae = 0
                                } else {
                                    ae = -S & 7
                                }
                                S = aa - 40 - ae | 0;
                                c[22] = ab + ae;
                                c[19] = S;
                                c[ab + (ae + 4) >> 2] = S | 1;
                                c[ab + (aa - 36) >> 2] = 40;
                                c[23] = c[14]
                            } else {
                                S = 512;
                                while (1) {
                                    af = c[S >> 2] | 0;
                                    ag = S + 4 | 0;
                                    ah = c[ag >> 2] | 0;
                                    if ((ab | 0) == (af + ah | 0)) {
                                        T = 364;
                                        break
                                    }
                                    ac = c[S + 8 >> 2] | 0;
                                    if ((ac | 0) == 0) {
                                        break
                                    } else {
                                        S = ac
                                    }
                                }
                                do {
                                    if ((T | 0) == 364) {
                                        if ((c[S + 12 >> 2] & 8 | 0) != 0) {
                                            break
                                        }
                                        ac = ad;
                                        if (!(ac >>> 0 >= af >>> 0 & ac >>> 0 < ab >>> 0)) {
                                            break
                                        }
                                        c[ag >> 2] = ah + aa;
                                        ac = c[22] | 0;
                                        Y = (c[19] | 0) + aa | 0;
                                        Z = ac;
                                        W = ac + 8 | 0;
                                        if ((W & 7 | 0) == 0) {
                                            ai = 0
                                        } else {
                                            ai = -W & 7
                                        }
                                        W = Y - ai | 0;
                                        c[22] = Z + ai;
                                        c[19] = W;
                                        c[Z + (ai + 4) >> 2] = W | 1;
                                        c[Z + (Y + 4) >> 2] = 40;
                                        c[23] = c[14];
                                        break L524
                                    }
                                } while (0);
                                if (ab >>> 0 < (c[20] | 0) >>> 0) {
                                    c[20] = ab
                                }
                                S = ab + aa | 0;
                                Y = 512;
                                while (1) {
                                    al = Y | 0;
                                    if ((c[al >> 2] | 0) == (S | 0)) {
                                        T = 374;
                                        break
                                    }
                                    Z = c[Y + 8 >> 2] | 0;
                                    if ((Z | 0) == 0) {
                                        break
                                    } else {
                                        Y = Z
                                    }
                                }
                                do {
                                    if ((T | 0) == 374) {
                                        if ((c[Y + 12 >> 2] & 8 | 0) != 0) {
                                            break
                                        }
                                        c[al >> 2] = ab;
                                        S = Y + 4 | 0;
                                        c[S >> 2] = (c[S >> 2] | 0) + aa;
                                        S = ab + 8 | 0;
                                        if ((S & 7 | 0) == 0) {
                                            ap = 0
                                        } else {
                                            ap = -S & 7
                                        }
                                        S = ab + (aa + 8) | 0;
                                        if ((S & 7 | 0) == 0) {
                                            aq = 0
                                        } else {
                                            aq = -S & 7
                                        }
                                        S = ab + (aq + aa) | 0;
                                        Z = S;
                                        W = ap + o | 0;
                                        ac = ab + W | 0;
                                        _ = ac;
                                        K = S - (ab + ap) - o | 0;
                                        c[ab + (ap + 4) >> 2] = o | 3;
                                        do {
                                            if ((Z | 0) == (c[22] | 0)) {
                                                J = (c[19] | 0) + K | 0;
                                                c[19] = J;
                                                c[22] = _;
                                                c[ab + (W + 4) >> 2] = J | 1
                                            } else {
                                                if ((Z | 0) == (c[21] | 0)) {
                                                    J = (c[18] | 0) + K | 0;
                                                    c[18] = J;
                                                    c[21] = _;
                                                    c[ab + (W + 4) >> 2] = J | 1;
                                                    c[ab + (J + W) >> 2] = J;
                                                    break
                                                }
                                                J = aa + 4 | 0;
                                                X = c[ab + (J + aq) >> 2] | 0;
                                                if ((X & 3 | 0) == 1) {
                                                    $ = X & -8;
                                                    V = X >>> 3;
                                                    L569: do {
                                                        if (X >>> 0 < 256 >>> 0) {
                                                            U = c[ab + ((aq | 8) + aa) >> 2] | 0;
                                                            Q = c[ab + (aa + 12 + aq) >> 2] | 0;
                                                            R = 104 + (V << 1 << 2) | 0;
                                                            do {
                                                                if ((U | 0) != (R | 0)) {
                                                                    if (U >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                    if ((c[U + 12 >> 2] | 0) == (Z | 0)) {
                                                                        break
                                                                    }
                                                                    an();
                                                                    return 0
                                                                }
                                                            } while (0);
                                                            if ((Q | 0) == (U | 0)) {
                                                                c[16] = c[16] & ~(1 << V);
                                                                break
                                                            }
                                                            do {
                                                                if ((Q | 0) == (R | 0)) {
                                                                    ar = Q + 8 | 0
                                                                } else {
                                                                    if (Q >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                    m = Q + 8 | 0;
                                                                    if ((c[m >> 2] | 0) == (Z | 0)) {
                                                                        ar = m;
                                                                        break
                                                                    }
                                                                    an();
                                                                    return 0
                                                                }
                                                            } while (0);
                                                            c[U + 12 >> 2] = Q;
                                                            c[ar >> 2] = U
                                                        } else {
                                                            R = S;
                                                            m = c[ab + ((aq | 24) + aa) >> 2] | 0;
                                                            P = c[ab + (aa + 12 + aq) >> 2] | 0;
                                                            do {
                                                                if ((P | 0) == (R | 0)) {
                                                                    O = aq | 16;
                                                                    g = ab + (J + O) | 0;
                                                                    L = c[g >> 2] | 0;
                                                                    if ((L | 0) == 0) {
                                                                        e = ab + (O + aa) | 0;
                                                                        O = c[e >> 2] | 0;
                                                                        if ((O | 0) == 0) {
                                                                            as = 0;
                                                                            break
                                                                        } else {
                                                                            at = O;
                                                                            au = e
                                                                        }
                                                                    } else {
                                                                        at = L;
                                                                        au = g
                                                                    }
                                                                    while (1) {
                                                                        g = at + 20 | 0;
                                                                        L = c[g >> 2] | 0;
                                                                        if ((L | 0) != 0) {
                                                                            at = L;
                                                                            au = g;
                                                                            continue
                                                                        }
                                                                        g = at + 16 | 0;
                                                                        L = c[g >> 2] | 0;
                                                                        if ((L | 0) == 0) {
                                                                            break
                                                                        } else {
                                                                            at = L;
                                                                            au = g
                                                                        }
                                                                    }
                                                                    if (au >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    } else {
                                                                        c[au >> 2] = 0;
                                                                        as = at;
                                                                        break
                                                                    }
                                                                } else {
                                                                    g = c[ab + ((aq | 8) + aa) >> 2] | 0;
                                                                    if (g >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                    L = g + 12 | 0;
                                                                    if ((c[L >> 2] | 0) != (R | 0)) {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                    e = P + 8 | 0;
                                                                    if ((c[e >> 2] | 0) == (R | 0)) {
                                                                        c[L >> 2] = P;
                                                                        c[e >> 2] = g;
                                                                        as = P;
                                                                        break
                                                                    } else {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                }
                                                            } while (0);
                                                            if ((m | 0) == 0) {
                                                                break
                                                            }
                                                            P = ab + (aa + 28 + aq) | 0;
                                                            U = 368 + (c[P >> 2] << 2) | 0;
                                                            do {
                                                                if ((R | 0) == (c[U >> 2] | 0)) {
                                                                    c[U >> 2] = as;
                                                                    if ((as | 0) != 0) {
                                                                        break
                                                                    }
                                                                    c[17] = c[17] & ~(1 << c[P >> 2]);
                                                                    break L569
                                                                } else {
                                                                    if (m >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    }
                                                                    Q = m + 16 | 0;
                                                                    if ((c[Q >> 2] | 0) == (R | 0)) {
                                                                        c[Q >> 2] = as
                                                                    } else {
                                                                        c[m + 20 >> 2] = as
                                                                    }
                                                                    if ((as | 0) == 0) {
                                                                        break L569
                                                                    }
                                                                }
                                                            } while (0);
                                                            if (as >>> 0 < (c[20] | 0) >>> 0) {
                                                                an();
                                                                return 0
                                                            }
                                                            c[as + 24 >> 2] = m;
                                                            R = aq | 16;
                                                            P = c[ab + (R + aa) >> 2] | 0;
                                                            do {
                                                                if ((P | 0) != 0) {
                                                                    if (P >>> 0 < (c[20] | 0) >>> 0) {
                                                                        an();
                                                                        return 0
                                                                    } else {
                                                                        c[as + 16 >> 2] = P;
                                                                        c[P + 24 >> 2] = as;
                                                                        break
                                                                    }
                                                                }
                                                            } while (0);
                                                            P = c[ab + (J + R) >> 2] | 0;
                                                            if ((P | 0) == 0) {
                                                                break
                                                            }
                                                            if (P >>> 0 < (c[20] | 0) >>> 0) {
                                                                an();
                                                                return 0
                                                            } else {
                                                                c[as + 20 >> 2] = P;
                                                                c[P + 24 >> 2] = as;
                                                                break
                                                            }
                                                        }
                                                    } while (0);
                                                    av = ab + (($ | aq) + aa) | 0;
                                                    aw = $ + K | 0
                                                } else {
                                                    av = Z;
                                                    aw = K
                                                }
                                                J = av + 4 | 0;
                                                c[J >> 2] = c[J >> 2] & -2;
                                                c[ab + (W + 4) >> 2] = aw | 1;
                                                c[ab + (aw + W) >> 2] = aw;
                                                J = aw >>> 3;
                                                if (aw >>> 0 < 256 >>> 0) {
                                                    V = J << 1;
                                                    X = 104 + (V << 2) | 0;
                              
Download .txt
gitextract_9g4qj153/

├── .gitignore
├── 3rdparty/
│   └── Cinder-VNM/
│       ├── README.md
│       ├── cinderblock.xml
│       ├── imgui_remote_client/
│       │   ├── imgui/
│       │   │   ├── detector.js
│       │   │   ├── lz4.js
│       │   │   └── main.css
│       │   ├── imgui.html
│       │   └── imgui.js
│       ├── include/
│       │   ├── AnsiToUtf.h
│       │   ├── AssetManager.h
│       │   ├── CaptureHelper.h
│       │   ├── CinderGuizmo.h
│       │   ├── CinderImGui.h
│       │   ├── CinderImGuiExports.h
│       │   ├── CinderRemoteImgui.h
│       │   ├── CubemapRenderer.h
│       │   ├── DearLogger.h
│       │   ├── FontHelper.h
│       │   ├── GLHelper.h
│       │   ├── GlslParamsBuilder.h
│       │   ├── GlslParamsBuilderImgui.h
│       │   ├── LimitSingleInstance.h
│       │   ├── MiniConfig.h
│       │   ├── MiniConfigImgui.h
│       │   ├── MotionHelper.h
│       │   ├── NvOptimusEnablement.h
│       │   ├── OscHelper.h
│       │   ├── SharedMemory.h
│       │   ├── StateMachine.h
│       │   ├── TextureHelper.h
│       │   ├── TuioHelper.h
│       │   └── renderdoc_app.h
│       ├── manually_copy_to_include/
│       │   └── item.def
│       ├── src/
│       │   ├── AssetManager.cpp
│       │   └── MiniConfig.cpp
│       ├── templates/
│       │   ├── DepthSensor VNM/
│       │   │   ├── assets/
│       │   │   │   ├── shader.frag
│       │   │   │   └── shader.vert
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   ├── Melo Scene/
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   ├── Minimalist VNM/
│       │   │   ├── assets/
│       │   │   │   ├── shader.frag
│       │   │   │   └── shader.vert
│       │   │   ├── include/
│       │   │   │   └── item.def
│       │   │   ├── src/
│       │   │   │   └── _TBOX_PREFIX_App.cpp
│       │   │   └── template.xml
│       │   └── NonGame/
│       │       ├── include/
│       │       │   └── item.def
│       │       ├── src/
│       │       │   └── _TBOX_PREFIX_App.cpp
│       │       └── template.xml
│       └── ui/
│           ├── CinderGuizmo.cpp
│           ├── CinderImGui.cpp
│           ├── CinderMarkdown.cpp
│           ├── CinderRemoteImgui.cpp
│           ├── DearLogger.cpp
│           ├── IconFontCppHeaders/
│           │   ├── IconsFontAwesome5.h
│           │   ├── IconsFontAwesome5Pro.h
│           │   ├── IconsFontAwesome5ProBrands.h
│           │   ├── IconsFontaudio.h
│           │   ├── IconsKenney.h
│           │   └── IconsMaterialDesign.h
│           ├── ImGuiColorTextEdit/
│           │   ├── .gitignore
│           │   ├── CONTRIBUTING
│           │   ├── LICENSE
│           │   ├── README.md
│           │   ├── TextEditor.cpp
│           │   └── TextEditor.h
│           ├── ImGuizmo/
│           │   ├── ImGuizmo.cpp
│           │   └── ImGuizmo.h
│           ├── imgui/
│           │   ├── imconfig.h
│           │   ├── imgui.cpp
│           │   ├── imgui.h
│           │   ├── imgui_demo.cpp
│           │   ├── imgui_draw.cpp
│           │   ├── imgui_internal.h
│           │   ├── imgui_tables.cpp
│           │   ├── imgui_widgets.cpp
│           │   ├── imstb_rectpack.h
│           │   ├── imstb_textedit.h
│           │   └── imstb_truetype.h
│           ├── imgui_markdown/
│           │   ├── License.txt
│           │   ├── README.md
│           │   └── imgui_markdown.h
│           ├── imgui_remote/
│           │   ├── imgui_remote.h
│           │   ├── imgui_remote_webby.h
│           │   ├── lz4/
│           │   │   ├── LICENSE
│           │   │   ├── lz4.c
│           │   │   ├── lz4.h
│           │   │   ├── lz4frame.c
│           │   │   ├── lz4frame.h
│           │   │   ├── lz4frame_static.h
│           │   │   ├── lz4hc.c
│           │   │   ├── lz4hc.h
│           │   │   ├── xxhash.c
│           │   │   └── xxhash.h
│           │   └── webby/
│           │       ├── LICENSE
│           │       ├── README.md
│           │       ├── webby.c
│           │       ├── webby.h
│           │       ├── webby_unix.h
│           │       └── webby_win32.h
│           └── implot/
│               ├── LICENSE
│               ├── README.md
│               ├── TODO.md
│               ├── implot.cpp
│               ├── implot.h
│               ├── implot_demo.cpp
│               ├── implot_internal.h
│               └── implot_items.cpp
├── LICENSE
├── README.md
├── _config.yml
├── build.bat
├── deploy.bat
├── doc/
│   ├── README.md
│   ├── android_application_profiling.md
│   ├── android_platform_profiling.md
│   ├── collect_etm_data_for_autofdo.md
│   ├── debug_dwarf_unwinding.md
│   ├── executable_commands_reference.md
│   ├── inferno.md
│   ├── jit_symbols.md
│   ├── sample_filter.md
│   └── scripts_reference.md
├── include/
│   ├── Resources.h
│   └── item.def
├── simpleperf/
│   ├── __init__.py
│   ├── annotate.py
│   ├── api_profiler.py
│   ├── app_profiler.py
│   ├── bin/
│   │   └── android/
│   │       └── arm64/
│   │           └── simpleperf
│   ├── binary_cache_builder.py
│   ├── clean_reports.bat
│   ├── debug_unwind_reporter.py
│   ├── gecko_profile_generator.py
│   ├── pprof_proto_generator.py
│   ├── profile_pb2.py
│   ├── report.py
│   ├── report_firefox.bat
│   ├── report_gui.bat
│   ├── report_html.bat
│   ├── report_html.js
│   ├── report_html.py
│   ├── report_sample.py
│   ├── run.bat
│   ├── run_simpleperf_on_device.py
│   ├── run_simpleperf_without_usb_connection.py
│   ├── simpleperf-help-report.txt
│   ├── simpleperf.bat
│   ├── simpleperf_report_lib.py
│   ├── simpleperf_utils.py
│   └── stackcollapse.py
├── src/
│   ├── LightSpeedApp.cpp
│   ├── LightSpeedApp.gui.cpp
│   └── LightSpeedApp.h
└── vc2019/
    ├── Resources.rc
    ├── perf-doctor.sln
    ├── perf-doctor.vcxproj
    ├── perf-doctor.vcxproj.filters
    └── resource.h
Download .txt
Showing preview only (283K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2930 symbols across 87 files)

FILE: 3rdparty/Cinder-VNM/imgui_remote_client/imgui.js
  function DataStream (line 8) | function DataStream(data) {
  function StartImgui (line 99) | function StartImgui(element, serveruri, targetwidth, targetheight, compr...

FILE: 3rdparty/Cinder-VNM/imgui_remote_client/imgui/lz4.js
  function e (line 4) | function e(a) {
  function q (line 12) | function q() {
  function ia (line 66) | function ia(a) {
  function ja (line 81) | function ja() {
  function ka (line 85) | function ka(a) {
  function la (line 89) | function la(a) {
  function na (line 109) | function na(a, b, c) {
  function pa (line 114) | function pa() {
  function qa (line 141) | function qa(a) {
  function ra (line 148) | function ra(a) {
  function ta (line 155) | function ta(a) {
  function va (line 163) | function va(a, b) {
  function w (line 171) | function w(a, b) {
  function Aa (line 178) | function Aa(a) {
  function za (line 187) | function za(a, b, c, d) {
  function Da (line 219) | function Da(a, b, c) {
  function K (line 282) | function K(a, b, c, d) {
  function Ca (line 305) | function Ca(a, b) {
  function La (line 355) | function La(a) {
  function Ma (line 459) | function Ma() {
  function O (line 496) | function O(a) {
  function Ya (line 513) | function Ya(a) {
  function Za (line 527) | function Za(a) {
  function D (line 532) | function D(a, b, c) {
  function Ba (line 552) | function Ba(a, b) {
  function bb (line 574) | function bb() {
  function cb (line 580) | function cb() {
  function kb (line 610) | function kb(a) {
  function lb (line 614) | function lb(a) {
  function pb (line 869) | function pb(a, b) {
  function U (line 1123) | function U(a, b) {
  function W (line 1162) | function W(a) {
  function Gb (line 1170) | function Gb(a, b) {
  function vb (line 1175) | function vb(a, b) {
  function tb (line 1185) | function tb(a, b, c, d) {
  function Hb (line 1249) | function Hb(a, b) {
  function Kb (line 1253) | function Kb(a, b) {
  function Lb (line 1269) | function Lb(a, b, c) {
  function Nb (line 1280) | function Nb(a, b) {
  function X (line 1286) | function X(a, b) {
  function Ob (line 1292) | function Ob(a, b, c) {
  function Pb (line 1297) | function Pb(a, b) {
  function Qb (line 1308) | function Qb(a, b) {
  function Rb (line 1320) | function Rb(a, b) {
  function Tb (line 1406) | function Tb(a) {
  function Ub (line 1416) | function Ub() {
  function Wb (line 1433) | function Wb(a, b) {
  function Xb (line 1440) | function Xb(a, b, c, d, f, g) {
  function Z (line 1470) | function Z(a, b, c, d) {
  function Yb (line 1514) | function Yb(a) {
  function Fb (line 1528) | function Fb(a, b) {
  function V (line 1538) | function V(a) {
  function Mb (line 1549) | function Mb(a) {
  function Eb (line 1555) | function Eb() {
  function ec (line 1573) | function ec(a) {
  function gc (line 1586) | function gc() {
  function hc (line 1593) | function hc() {
  function ic (line 1603) | function ic() {
  function c (line 1613) | function c() {
  function j (line 1765) | function j() {
  function z (line 1769) | function z(c) {
  function f (line 1844) | function f(d) {
  function g (line 1848) | function g() {
  function av (line 2101) | function av(a) {
  function aw (line 2110) | function aw() {
  function ax (line 2114) | function ax(a) {
  function ay (line 2119) | function ay(a, b) {
  function az (line 2128) | function az(b) {
  function aA (line 2136) | function aA(b) {
  function aB (line 2148) | function aB(a) {
  function aC (line 2153) | function aC(a) {
  function aD (line 2158) | function aD(a) {
  function aE (line 2163) | function aE(a) {
  function aF (line 2168) | function aF(a) {
  function aG (line 2173) | function aG(a) {
  function aH (line 2178) | function aH(a) {
  function aI (line 2183) | function aI(a) {
  function aJ (line 2188) | function aJ(a) {
  function aK (line 2193) | function aK(a) {
  function aL (line 2198) | function aL() {}
  function aM (line 2200) | function aM(f, g, h) {
  function aN (line 2897) | function aN(b, e, f, g) {
  function aO (line 3202) | function aO(a, b, e) {
  function aP (line 3392) | function aP(a) {
  function aQ (line 5127) | function aQ(a) {
  function aR (line 5727) | function aR(b, d, e) {
  function aS (line 5760) | function aS(b, d, e) {
  function aT (line 5790) | function aT(b) {
  function aU (line 5802) | function aU(b) {
  function aV (line 5812) | function aV(a, b) {
  function aW (line 5818) | function aW(a) {
  function aX (line 5823) | function aX(a, b, c) {
  function aY (line 5830) | function aY(a, b) {
  function aZ (line 5836) | function aZ(a) {
  function a_ (line 5842) | function a_() {
  function a$ (line 5846) | function a$(a, b) {
  function a0 (line 5853) | function a0(a) {
  function xc (line 6143) | function xc(a) {
  function b (line 6155) | function b() {
  function Cc (line 6179) | function Cc(a) {
  function Dc (line 6207) | function Dc(a) {
  function B (line 6215) | function B(a) {
  function Ec (line 6227) | function Ec(a) {

FILE: 3rdparty/Cinder-VNM/include/AnsiToUtf.h
  function std (line 10) | static std::wstring AnsiToUtf16( const std::string& str )
  function std (line 23) | static std::string Utf16ToAnsi( const std::wstring& str )
  function std (line 36) | static std::wstring Utf8ToUtf16( const std::string& str )
  function std (line 49) | static std::string Utf16ToUtf8( const std::wstring& str )
  function std (line 62) | static std::string AnsiToUtf8( const std::string& str )
  function std (line 67) | static std::string Utf8ToAnsi( const std::string& str )

FILE: 3rdparty/Cinder-VNM/include/AssetManager.h
  function namespace (line 13) | namespace am // am -> asset manager

FILE: 3rdparty/Cinder-VNM/include/CaptureHelper.h
  function checkNewFrame (line 12) | struct CaptureHelper

FILE: 3rdparty/Cinder-VNM/include/CinderGuizmo.h
  function namespace (line 5) | namespace ImGui

FILE: 3rdparty/Cinder-VNM/include/CinderImGui.h
  function namespace (line 42) | namespace cinder {
  function namespace (line 75) | namespace ImGui {
  function ScopedMainMenuBar (line 263) | struct IMGUI_API ScopedMainMenuBar : public ci::Noncopyable {
  function ScopedMenuBar (line 269) | struct IMGUI_API ScopedMenuBar : public ci::Noncopyable {

FILE: 3rdparty/Cinder-VNM/include/CinderRemoteImgui.h
  function namespace (line 28) | namespace cinder::app {

FILE: 3rdparty/Cinder-VNM/include/CubemapRenderer.h
  type CubeMapRenderer (line 6) | struct CubeMapRenderer
  function draw (line 19) | void draw()

FILE: 3rdparty/Cinder-VNM/include/DearLogger.h
  function namespace (line 10) | namespace ImGui

FILE: 3rdparty/Cinder-VNM/include/FontHelper.h
  type FontHelper (line 5) | struct FontHelper

FILE: 3rdparty/Cinder-VNM/include/GLHelper.h
  function namespace (line 8) | namespace cinder {

FILE: 3rdparty/Cinder-VNM/include/GlslParamsBuilder.h
  function GlslParamsBuilder (line 8) | struct GlslParamsBuilder
  function applyUniforms (line 75) | void applyUniforms()

FILE: 3rdparty/Cinder-VNM/include/GlslParamsBuilderImgui.h
  type GlslParamsBuilderImgui (line 8) | struct GlslParamsBuilderImgui
  function applyUniforms (line 32) | void applyUniforms()

FILE: 3rdparty/Cinder-VNM/include/LimitSingleInstance.h
  function class (line 8) | class LimitSingleInstance

FILE: 3rdparty/Cinder-VNM/include/MiniConfig.h
  function namespace (line 43) | namespace cinder { namespace params {

FILE: 3rdparty/Cinder-VNM/include/MiniConfigImgui.h
  function namespace (line 12) | namespace vnm

FILE: 3rdparty/Cinder-VNM/include/MotionHelper.h
  type MotionHelper (line 10) | struct MotionHelper

FILE: 3rdparty/Cinder-VNM/include/OscHelper.h
  function catch (line 6) | struct OscHelper
  function std (line 24) | static std::unique_ptr<cinder::osc::ReceiverUdp> createReceiver(uint16_t...

FILE: 3rdparty/Cinder-VNM/include/StateMachine.h
  type AwesomeApp (line 7) | struct AwesomeApp
  type StateIdle (line 9) | struct StateIdle
  type StatePlay (line 20) | struct StatePlay
  type AwesomeApp (line 31) | struct AwesomeApp
  type std (line 51) | typedef std::shared_ptr<State<T>> Ref;
  function virtual (line 53) | virtual std::string getName() { return "State"; }
  function virtual (line 55) | virtual void enter(T* owner)    {}
  function virtual (line 56) | virtual void update(T* owner)   {}
  function virtual (line 57) | virtual void draw(T* owner)     {}
  function virtual (line 58) | virtual void exit(T* owner)     {}
  function virtual (line 59) | virtual void sendMessage(T* owner, const std::string& msg) {}
  type typename (line 73) | typedef typename State<T>::Ref StateRef;
  function setOwner (line 78) | void setOwner(T* owner)
  function updateFSM (line 83) | void updateFSM()
  function drawFSM (line 89) | void drawFSM()
  function sendMessage (line 95) | void sendMessage(const std::string& msg)
  function changeToPreviousState (line 101) | void changeToPreviousState()
  function changeToState (line 106) | void changeToState(const StateRef& newState)

FILE: 3rdparty/Cinder-VNM/include/TextureHelper.h
  function gl (line 24) | static gl::Texture::Format getTextureFormatUINT16()
  function gl (line 33) | static gl::TextureCubeMap::Format getTextureFormatHDRCubeMap()
  function gl (line 43) | static gl::Texture::Format getTextureFormatDefault()

FILE: 3rdparty/Cinder-VNM/include/TuioHelper.h
  function catch (line 6) | struct TuioHelper
  function std (line 24) | static std::unique_ptr<cinder::osc::ReceiverUdp> createReceiver(uint16_t...

FILE: 3rdparty/Cinder-VNM/include/renderdoc_app.h
  type RENDERDOC_CaptureOption (line 75) | typedef enum RENDERDOC_CaptureOption {
  type RENDERDOC_InputButton (line 235) | typedef enum RENDERDOC_InputButton {
  type RENDERDOC_OverlayBits (line 323) | typedef enum RENDERDOC_OverlayBits {
  type pRENDERDOC_RemoveHooks (line 362) | typedef pRENDERDOC_RemoveHooks pRENDERDOC_Shutdown;
  type pRENDERDOC_SetCaptureFilePathTemplate (line 394) | typedef pRENDERDOC_SetCaptureFilePathTemplate pRENDERDOC_SetLogFilePathT...
  type pRENDERDOC_GetCaptureFilePathTemplate (line 395) | typedef pRENDERDOC_GetCaptureFilePathTemplate pRENDERDOC_GetLogFilePathT...
  type pRENDERDOC_IsTargetControlConnected (line 435) | typedef pRENDERDOC_IsTargetControlConnected pRENDERDOC_IsRemoteAccessCon...
  type RENDERDOC_Version (line 540) | typedef enum RENDERDOC_Version {
  type RENDERDOC_API_1_4_1 (line 578) | typedef struct RENDERDOC_API_1_4_1
  type RENDERDOC_API_1_4_1 (line 652) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_0_0;
  type RENDERDOC_API_1_4_1 (line 653) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_0_1;
  type RENDERDOC_API_1_4_1 (line 654) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_0_2;
  type RENDERDOC_API_1_4_1 (line 655) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_1_0;
  type RENDERDOC_API_1_4_1 (line 656) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_1_1;
  type RENDERDOC_API_1_4_1 (line 657) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_1_2;
  type RENDERDOC_API_1_4_1 (line 658) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_2_0;
  type RENDERDOC_API_1_4_1 (line 659) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_3_0;
  type RENDERDOC_API_1_4_1 (line 660) | typedef RENDERDOC_API_1_4_1 RENDERDOC_API_1_4_0;

FILE: 3rdparty/Cinder-VNM/src/AssetManager.cpp
  function T (line 24) | T& getAssetResource(const string& relativeName, function<T(const string&...
  type am (line 70) | namespace am
    function addAssetDirectory (line 72) | void addAssetDirectory(const fs::path& dirPath)
    function BufferRef (line 78) | BufferRef& buffer(const string& relativeName)
    function SurfaceRef (line 88) | SurfaceRef& surface(const string& relativeName, bool forceAlpha)
    function Surface16uRef (line 99) | Surface16uRef& surface16u(const string& relativeName, bool forceAlpha)
    function Surface32fRef (line 110) | Surface32fRef& surface32f(const string& relativeName, bool forceAlpha)
    function ChannelRef (line 121) | ChannelRef& channel(const std::string& relativeName)
    function Channel16uRef (line 131) | Channel16uRef& channel16u(const std::string& relativeName)
    type Task (line 145) | struct Task
    function TriMeshRef (line 256) | TriMeshRef& triMesh(const string& objFileName, const std::string& mtlF...
    function string (line 387) | string& str(const string& relativeName)
    function loadPaths (line 396) | static vector<string> loadPaths(const string& absoluteFolderName, cons...

FILE: 3rdparty/Cinder-VNM/src/MiniConfig.cpp
  function readConfig (line 24) | void readConfig()
  function writeConfig (line 63) | void writeConfig()
  function revertToDefaultValues (line 112) | void revertToDefaultValues()
  function getItemHeight (line 128) | int getItemHeight(const T&)
  function getItemHeight (line 134) | int getItemHeight(const quat&)
  function getItemHeight (line 140) | int getItemHeight(const vec3&)
  function getItemHeight (line 146) | int getItemHeight(const Color&)
  function getItemHeight (line 152) | int getItemHeight(const ColorA&)
  function getConfigUIHeight (line 157) | int getConfigUIHeight()
  function takeScreenShot (line 173) | void takeScreenShot()
  function createConfigUI (line 184) | shared_ptr<params::InterfaceGl> createConfigUI(const ivec2& size)

FILE: 3rdparty/Cinder-VNM/templates/DepthSensor VNM/src/_TBOX_PREFIX_App.cpp
  type _TBOX_PREFIX_App (line 15) | struct _TBOX_PREFIX_App : public App
    method setup (line 17) | void setup() override

FILE: 3rdparty/Cinder-VNM/templates/Melo Scene/src/_TBOX_PREFIX_App.cpp
  type _TBOX_PREFIX_App (line 16) | struct _TBOX_PREFIX_App : public App
    method setup (line 18) | void setup() override

FILE: 3rdparty/Cinder-VNM/templates/Minimalist VNM/src/_TBOX_PREFIX_App.cpp
  type _TBOX_PREFIX_App (line 14) | struct _TBOX_PREFIX_App : public App
    method setup (line 16) | void setup() override

FILE: 3rdparty/Cinder-VNM/templates/NonGame/src/_TBOX_PREFIX_App.cpp
  type _TBOX_PREFIX_App (line 13) | struct _TBOX_PREFIX_App : public App
    method setup (line 15) | void setup() override

FILE: 3rdparty/Cinder-VNM/ui/CinderImGui.cpp
  type ImGui (line 54) | namespace ImGui {
    function ImWchar (line 220) | const ImWchar* ImGui::Options::getFontGlyphRanges( const std::string &...
    class Renderer (line 303) | class Renderer {
    function ImFont (line 530) | ImFont* Renderer::addFont( const ci::fs::path &font, float size, const...
    function ImFont (line 727) | ImFont* Renderer::getFont( const std::string &name )
    function RendererRef (line 739) | RendererRef getRenderer()
    function Image (line 747) | void Image( const ci::gl::Texture2dRef &texture, const ImVec2& size, c...
    function ImageButton (line 751) | bool ImageButton( const ci::gl::Texture2dRef &texture, const ImVec2& s...
    function PushFont (line 756) | void PushFont( const std::string& name )
    function Combo (line 764) | bool Combo(const char* label, int* currIndex, const std::vector<std::s...
    function ListBox (line 792) | bool ListBox( const char* label, int* current_item, const std::vector<...
    function InputText (line 807) | bool InputText( const char* label, std::string* buf, ImGuiInputTextFla...
    function InputTextMultiline (line 820) | bool InputTextMultiline( const char* label, std::string* buf, const Im...
    function mouseDown (line 838) | void mouseDown( ci::app::MouseEvent& event )
    function mouseMove (line 854) | void mouseMove( ci::app::MouseEvent& event )
    function mouseDrag (line 862) | void mouseDrag( ci::app::MouseEvent& event )
    function mouseUp (line 870) | void mouseUp( ci::app::MouseEvent& event )
    function mouseWheel (line 879) | void mouseWheel( ci::app::MouseEvent& event )
    function keyDown (line 891) | void keyDown( ci::app::KeyEvent& event )
    function keyUp (line 921) | void keyUp( ci::app::KeyEvent& event )
    function render (line 942) | void render()
    function newFrameGuard (line 963) | void newFrameGuard()
    function resize (line 971) | void resize()
    function resetKeys (line 978) | void resetKeys()
    function initialize (line 1002) | void initialize( const Options &options )
    function connectWindow (line 1126) | void connectWindow( ci::app::WindowRef window )
    function disconnectWindow (line 1137) | void disconnectWindow( ci::app::WindowRef window )
    type DockContext (line 1365) | struct DockContext
      type Slot_ (line 1367) | enum Slot_
      type EndAction_ (line 1380) | enum EndAction_
      type Status_ (line 1389) | enum Status_
      type Dock (line 1397) | struct Dock
        method Dock (line 1399) | Dock()
        method ImVec2 (line 1419) | ImVec2 getMinSize() const
        method isHorizontal (line 1430) | bool isHorizontal() const { return children[0]->pos.x < children[1...
        method setParent (line 1433) | void setParent(Dock* dock)
        method Dock (line 1441) | Dock& getSibling()
        method Dock (line 1449) | Dock& getFirstTab()
        method setActive (line 1457) | void setActive()
        method isContainer (line 1465) | bool isContainer() const { return children[0] != nullptr; }
        method setChildrenPosSize (line 1468) | void setChildrenPosSize(const ImVec2& _pos, const ImVec2& _size)
        method setPosSize (line 1514) | void setPosSize(const ImVec2& _pos, const ImVec2& _size)
      method Dock (line 1562) | Dock& getDock(const char* label, bool opened)
        method Dock (line 1399) | Dock()
        method ImVec2 (line 1419) | ImVec2 getMinSize() const
        method isHorizontal (line 1430) | bool isHorizontal() const { return children[0]->pos.x < children[1...
        method setParent (line 1433) | void setParent(Dock* dock)
        method Dock (line 1441) | Dock& getSibling()
        method Dock (line 1449) | Dock& getFirstTab()
        method setActive (line 1457) | void setActive()
        method isContainer (line 1465) | bool isContainer() const { return children[0] != nullptr; }
        method setChildrenPosSize (line 1468) | void setChildrenPosSize(const ImVec2& _pos, const ImVec2& _size)
        method setPosSize (line 1514) | void setPosSize(const ImVec2& _pos, const ImVec2& _size)
      method putInBackground (line 1589) | void putInBackground()
      method splits (line 1610) | void splits()
      method checkNonexistent (line 1666) | void checkNonexistent()
      method beginPanel (line 1688) | void beginPanel()
      method endPanel (line 1715) | void endPanel()
      method Dock (line 1722) | Dock* getDockAt(const ImVec2& pos) const
        method Dock (line 1399) | Dock()
        method ImVec2 (line 1419) | ImVec2 getMinSize() const
        method isHorizontal (line 1430) | bool isHorizontal() const { return children[0]->pos.x < children[1...
        method setParent (line 1433) | void setParent(Dock* dock)
        method Dock (line 1441) | Dock& getSibling()
        method Dock (line 1449) | Dock& getFirstTab()
        method setActive (line 1457) | void setActive()
        method isContainer (line 1465) | bool isContainer() const { return children[0] != nullptr; }
        method setChildrenPosSize (line 1468) | void setChildrenPosSize(const ImVec2& _pos, const ImVec2& _size)
        method setPosSize (line 1514) | void setPosSize(const ImVec2& _pos, const ImVec2& _size)
      method ImRect (line 1739) | static ImRect getDockedRect(const ImRect& rect, Slot_ dock_slot)
      method ImRect (line 1753) | static ImRect getSlotRect(ImRect parent_rect, Slot_ dock_slot)
      method ImRect (line 1768) | static ImRect getSlotRectOnBorder(ImRect parent_rect, Slot_ dock_slot)
      method Dock (line 1793) | Dock* getRootDock()
        method Dock (line 1399) | Dock()
        method ImVec2 (line 1419) | ImVec2 getMinSize() const
        method isHorizontal (line 1430) | bool isHorizontal() const { return children[0]->pos.x < children[1...
        method setParent (line 1433) | void setParent(Dock* dock)
        method Dock (line 1441) | Dock& getSibling()
        method Dock (line 1449) | Dock& getFirstTab()
        method setActive (line 1457) | void setActive()
        method isContainer (line 1465) | bool isContainer() const { return children[0] != nullptr; }
        method setChildrenPosSize (line 1468) | void setChildrenPosSize(const ImVec2& _pos, const ImVec2& _size)
        method setPosSize (line 1514) | void setPosSize(const ImVec2& _pos, const ImVec2& _size)
      method dockSlots (line 1807) | bool dockSlots(Dock& dock, Dock* dest_dock, const ImRect& rect, bool...
      method handleDrag (line 1833) | void handleDrag(Dock& dock)
      method fillLocation (line 1883) | void fillLocation(Dock& dock)
      method doUndock (line 1898) | void doUndock(Dock& dock)
      method drawTabbarListButton (line 1964) | void drawTabbarListButton(Dock& dock)
      method tabbar (line 2004) | bool tabbar(Dock& dock, bool close_button)
      method setDockPosSize (line 2075) | static void setDockPosSize(Dock& dest, Dock& dock, Slot_ dock_slot, ...
      method doDock (line 2120) | void doDock(Dock& dock, Dock* dest, Slot_ dock_slot)
      method rootDock (line 2184) | void rootDock(const ImVec2& pos, const ImVec2& size)
      method setDockActive (line 2195) | void setDockActive()
      method Slot_ (line 2202) | static Slot_ getSlotFromLocationCode(char code)
      method getLocationCode (line 2214) | static char getLocationCode(Dock* dock)
      method tryDockToStoredLocation (line 2233) | void tryDockToStoredLocation(Dock& dock)
      method begin (line 2254) | bool begin(const char* label, bool* opened, ImGuiWindowFlags extra_f...
      method end (line 2348) | void end()
      method getDockIndex (line 2367) | int getDockIndex(Dock* dock)
    function ShutdownDock (line 2511) | void ShutdownDock()
    function RootDock (line 2522) | void RootDock(const ImVec2& pos, const ImVec2& size)
    function SetDockActive (line 2528) | void SetDockActive()
    function BeginDock (line 2534) | bool BeginDock(const char* label, bool* opened, ImGuiWindowFlags extra...
    function EndDock (line 2540) | void EndDock()

FILE: 3rdparty/Cinder-VNM/ui/CinderMarkdown.cpp
  function LinkCallback (line 17) | void LinkCallback(ImGui::MarkdownLinkCallbackData data_)
  function ImageCallback (line 23) | inline ImGui::MarkdownImageData ImageCallback(ImGui::MarkdownLinkCallbac...
  function LoadFonts (line 31) | void LoadFonts(float fontSize_ = 12.0f)
  function Markdown (line 45) | void Markdown(const std::string& markdown_)
  function MarkdownExample (line 51) | void MarkdownExample()

FILE: 3rdparty/Cinder-VNM/ui/CinderRemoteImgui.cpp
  function createRemoteImgui (line 12) | void createRemoteImgui(const char* address, int port)
  function updateRemoteImgui (line 18) | void updateRemoteImgui(bool ENABLE_REMOTE_GUI)
  function ImGui_ImplCinder_NewFrameGuard (line 58) | void ImGui_ImplCinder_NewFrameGuard(const ci::app::WindowRef& window) {
  function ImGui_ImplCinder_PostDraw (line 81) | void ImGui_ImplCinder_PostDraw(bool ENABLE_REMOTE_GUI, bool ENABLE_LOCAL...

FILE: 3rdparty/Cinder-VNM/ui/DearLogger.cpp
  type ImGui (line 3) | namespace ImGui

FILE: 3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/TextEditor.cpp
  function equals (line 16) | bool equals(InputIt1 first1, InputIt1 last1,
  function UTF8CharLength (line 146) | static int UTF8CharLength(TextEditor::Char c)
  function ImTextCharToUtf8 (line 162) | static inline int ImTextCharToUtf8(char* buf, int buf_size, unsigned int c)
  function ImU32 (line 677) | ImU32 TextEditor::GetGlyphColor(const Glyph & aGlyph) const
  function IsUTFSequence (line 1553) | static bool IsUTFSequence(char c)
  function TokenizeCStyleString (line 2521) | static bool TokenizeCStyleString(const char * in_begin, const char * in_...
  function TokenizeCStyleCharacterLiteral (line 2550) | static bool TokenizeCStyleCharacterLiteral(const char * in_begin, const ...
  function TokenizeCStyleIdentifier (line 2577) | static bool TokenizeCStyleIdentifier(const char * in_begin, const char *...
  function TokenizeCStyleNumber (line 2596) | static bool TokenizeCStyleNumber(const char * in_begin, const char * in_...
  function TokenizeCStylePunctuation (line 2700) | static bool TokenizeCStylePunctuation(const char * in_begin, const char ...

FILE: 3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/TextEditor.h
  function class (line 13) | class TextEditor

FILE: 3rdparty/Cinder-VNM/ui/ImGuizmo/ImGuizmo.cpp
  type IMGUIZMO_NAMESPACE (line 45) | namespace IMGUIZMO_NAMESPACE
    function OPERATION (line 54) | static OPERATION operator&(OPERATION lhs, OPERATION rhs)
    function Intersects (line 69) | static bool Intersects(OPERATION lhs, OPERATION rhs)
    function Contains (line 75) | static bool Contains(OPERATION lhs, OPERATION rhs)
    function FPU_MatrixF_x_MatrixF (line 83) | void FPU_MatrixF_x_MatrixF(const float* a, const float* b, float* r)
    function Frustum (line 106) | void Frustum(float left, float right, float bottom, float top, float z...
    function Perspective (line 131) | void Perspective(float fovyInDegrees, float aspectRatio, float znear, ...
    function Cross (line 139) | void Cross(const float* a, const float* b, float* r)
    function Dot (line 146) | float Dot(const float* a, const float* b)
    function Normalize (line 151) | void Normalize(const float* a, float* r)
    function LookAt (line 159) | void LookAt(const float* eye, const float* at, const float* up, float*...
    function T (line 191) | T Clamp(T x, T y, T z) { return ((x < y) ? y : ((x > z) ? z : x)); }
    function T (line 192) | T max(T x, T y) { return (x > y) ? x : y; }
    function T (line 193) | T min(T x, T y) { return (x < y) ? x : y; }
    function IsWithin (line 194) | bool IsWithin(T x, T y, T z) { return (x >= y) && (x <= z); }
    type matrix_t (line 196) | struct matrix_t
      method matrix_t (line 326) | matrix_t(const matrix_t& other) { memcpy(&m16[0], &other.m16[0], siz...
      method matrix_t (line 327) | matrix_t() {}
      method Translation (line 331) | void Translation(float _x, float _y, float _z) { this->Translation(m...
      method Translation (line 333) | void Translation(const vec_t& vt)
      method Scale (line 341) | void Scale(float _x, float _y, float _z)
      method Scale (line 348) | void Scale(const vec_t& s) { Scale(s.x, s.y, s.z); }
      method matrix_t (line 350) | matrix_t& operator *= (const matrix_t& mat)
      method matrix_t (line 358) | matrix_t operator * (const matrix_t& mat) const
      method Multiply (line 365) | void Multiply(const matrix_t& matrix)
      method Multiply (line 373) | void Multiply(const matrix_t& m1, const matrix_t& m2)
      method GetDeterminant (line 378) | float GetDeterminant() const
      method SetToIdentity (line 385) | void SetToIdentity()
      method Transpose (line 392) | void Transpose()
      method OrthoNormalize (line 407) | void OrthoNormalize()
    type vec_t (line 197) | struct vec_t
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 275) | vec_t makeVect(float _x, float _y, float _z = 0.f, float _w = 0.f) { v...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 276) | vec_t makeVect(ImVec2 v) { vec_t res; res.x = v.x; res.y = v.y; res.z ...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 277) | vec_t vec_t::operator * (float f) const { return makeVect(x * f, y * f...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 278) | vec_t vec_t::operator - () const { return makeVect(-x, -y, -z, -w); }
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 279) | vec_t vec_t::operator - (const vec_t& v) const { return makeVect(x - v...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 280) | vec_t vec_t::operator + (const vec_t& v) const { return makeVect(x + v...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 281) | vec_t vec_t::operator * (const vec_t& v) const { return makeVect(x * v...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 282) | vec_t vec_t::Abs() const { return makeVect(fabsf(x), fabsf(y), fabsf(z...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 284) | vec_t Normalized(const vec_t& v) { vec_t res; res = v; res.Normalize()...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function vec_t (line 285) | vec_t Cross(const vec_t& v1, const vec_t& v2)
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function Dot (line 295) | float Dot(const vec_t& v1, const vec_t& v2)
    function vec_t (line 300) | vec_t BuildPlan(const vec_t& p_point1, const vec_t& p_normal)
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    type matrix_t (line 311) | struct matrix_t
      method matrix_t (line 326) | matrix_t(const matrix_t& other) { memcpy(&m16[0], &other.m16[0], siz...
      method matrix_t (line 327) | matrix_t() {}
      method Translation (line 331) | void Translation(float _x, float _y, float _z) { this->Translation(m...
      method Translation (line 333) | void Translation(const vec_t& vt)
      method Scale (line 341) | void Scale(float _x, float _y, float _z)
      method Scale (line 348) | void Scale(const vec_t& s) { Scale(s.x, s.y, s.z); }
      method matrix_t (line 350) | matrix_t& operator *= (const matrix_t& mat)
      method matrix_t (line 358) | matrix_t operator * (const matrix_t& mat) const
      method Multiply (line 365) | void Multiply(const matrix_t& matrix)
      method Multiply (line 373) | void Multiply(const matrix_t& m1, const matrix_t& m2)
      method GetDeterminant (line 378) | float GetDeterminant() const
      method SetToIdentity (line 385) | void SetToIdentity()
      method Transpose (line 392) | void Transpose()
      method OrthoNormalize (line 407) | void OrthoNormalize()
    type MOVETYPE (line 607) | enum MOVETYPE
    function IsTranslateType (line 627) | static bool IsTranslateType(int type)
    function IsRotateType (line 632) | static bool IsRotateType(int type)
    function IsScaleType (line 637) | static bool IsScaleType(int type)
    type Context (line 645) | struct Context
      method Context (line 647) | Context() : mbUsing(false), mbEnable(true), mbUsingBounds(false)
    function ImVec2 (line 768) | static ImVec2 worldToPos(const vec_t& worldPos, const matrix_t& mat, I...
    function ComputeCameraRay (line 782) | static void ComputeCameraRay(vec_t& rayOrigin, vec_t& rayDir, ImVec2 p...
    function GetSegmentLengthClipSpace (line 803) | static float GetSegmentLengthClipSpace(const vec_t& start, const vec_t...
    function GetParallelogram (line 826) | static float GetParallelogram(const vec_t& ptO, const vec_t& ptA, cons...
    function vec_t (line 848) | inline vec_t PointOnSegment(const vec_t& point, const vec_t& vertPos1,...
      method Lerp (line 202) | void Lerp(const vec_t& v, float t)
      method Set (line 210) | void Set(float v) { x = y = z = w = v; }
      method Set (line 211) | void Set(float _x, float _y, float _z = 0.f, float _w = 0.f) { x = _...
      method vec_t (line 213) | vec_t& operator -= (const vec_t& v) { x -= v.x; y -= v.y; z -= v.z; ...
      method vec_t (line 214) | vec_t& operator += (const vec_t& v) { x += v.x; y += v.y; z += v.z; ...
      method vec_t (line 215) | vec_t& operator *= (const vec_t& v) { x *= v.x; y *= v.y; z *= v.z; ...
      method vec_t (line 216) | vec_t& operator *= (float v) { x *= v;    y *= v;    z *= v;    w *=...
      method vec_t (line 224) | const vec_t& operator + () const { return (*this); }
      method Length (line 225) | float Length() const { return sqrtf(x * x + y * y + z * z); }
      method LengthSq (line 226) | float LengthSq() const { return (x * x + y * y + z * z); }
      method vec_t (line 227) | vec_t Normalize() { (*this) *= (1.f / ( Length() > FLT_EPSILON ? Len...
      method vec_t (line 228) | vec_t Normalize(const vec_t& v) { this->Set(v.x, v.y, v.z, v.w); thi...
      method Cross (line 231) | void Cross(const vec_t& v)
      method Cross (line 244) | void Cross(const vec_t& v1, const vec_t& v2)
      method Dot (line 252) | float Dot(const vec_t& v) const
      method Dot3 (line 257) | float Dot3(const vec_t& v) const
      method TransformVector (line 267) | void TransformVector(const vec_t& v, const matrix_t& matrix) { (*thi...
      method TransformPoint (line 268) | void TransformPoint(const vec_t& v, const matrix_t& matrix) { (*this...
    function IntersectRayPlane (line 870) | static float IntersectRayPlane(const vec_t& rOrigin, const vec_t& rVec...
    function DistanceToPlane (line 883) | static float DistanceToPlane(const vec_t& point, const vec_t& plan)
    function IsInContextRect (line 888) | static bool IsInContextRect(ImVec2 p)
    function IsHoveringWindow (line 893) | static bool IsHoveringWindow()
    function SetRect (line 906) | void SetRect(float x, float y, float width, float height)
    function SetOrthographic (line 917) | void SetOrthographic(bool isOrthographic)
    function SetDrawlist (line 922) | void SetDrawlist(ImDrawList* drawlist)
    function SetImGuiContext (line 927) | void SetImGuiContext(ImGuiContext* ctx)
    function BeginFrame (line 932) | void BeginFrame()
    function IsUsing (line 956) | bool IsUsing()
    function IsOver (line 961) | bool IsOver()
    function IsOver (line 968) | bool IsOver(OPERATION op)
    function Enable (line 989) | void Enable(bool enable)
    function ComputeContext (line 999) | static void ComputeContext(const float* view, const float* projection,...
    function ComputeColors (line 1058) | static void ComputeColors(ImU32* colors, int type, OPERATION operation)
    function ComputeTripodAxisAndVisibility (line 1102) | static void ComputeTripodAxisAndVisibility(const int axisIndex, vec_t&...
    function ComputeSnap (line 1155) | static void ComputeSnap(float* value, float snap)
    function ComputeSnap (line 1173) | static void ComputeSnap(vec_t& value, const float* snap)
    function ComputeAngleOnPlan (line 1181) | static float ComputeAngleOnPlan()
    function DrawRotationGizmo (line 1195) | static void DrawRotationGizmo(OPERATION op, int type)
    function DrawHatchedAxis (line 1286) | static void DrawHatchedAxis(const vec_t& axis)
    function DrawScaleGizmo (line 1296) | static void DrawScaleGizmo(OPERATION op, int type)
    function DrawScaleUniveralGizmo (line 1383) | static void DrawScaleUniveralGizmo(OPERATION op, int type)
    function DrawTranslationGizmo (line 1465) | static void DrawTranslationGizmo(OPERATION op, int type)
    function CanActivate (line 1559) | static bool CanActivate()
    function HandleAndDrawLocalBounds (line 1568) | static void HandleAndDrawLocalBounds(const float* bounds, matrix_t* ma...
    function GetScaleType (line 1830) | static int GetScaleType(OPERATION op)
    function GetRotateType (line 1917) | static int GetRotateType(OPERATION op)
    function GetMoveType (line 1975) | static int GetMoveType(OPERATION op, vec_t* gizmoHitProportion)
    function HandleTranslation (line 2031) | static bool HandleTranslation(float* matrix, float* deltaMatrix, OPERA...
    function HandleScale (line 2145) | static bool HandleScale(float* matrix, float* deltaMatrix, OPERATION o...
    function HandleRotation (line 2258) | static bool HandleRotation(float* matrix, float* deltaMatrix, OPERATIO...
    function DecomposeMatrixToComponents (line 2359) | void DecomposeMatrixToComponents(const float* matrix, float* translati...
    function RecomposeMatrixFromComponents (line 2378) | void RecomposeMatrixFromComponents(const float* translation, const flo...
    function SetID (line 2408) | void SetID(int id)
    function AllowAxisFlip (line 2413) | void AllowAxisFlip(bool value)
    function Manipulate (line 2418) | bool Manipulate(const float* view, const float* projection, OPERATION ...
    function SetGizmoSizeClipSpace (line 2466) | void SetGizmoSizeClipSpace(float value)
    function ComputeFrustumPlanes (line 2472) | void ComputeFrustumPlanes(vec_t* frustum, const float* clip)
    function DrawCubes (line 2510) | void DrawCubes(const float* view, const float* projection, const float...
    function DrawGrid (line 2622) | void DrawGrid(const float* view, const float* projection, const float*...
    function ViewManipulate (line 2678) | void ViewManipulate(float* view, float length, ImVec2 position, ImVec2...

FILE: 3rdparty/Cinder-VNM/ui/ImGuizmo/ImGuizmo.h
  function EditTransform (line 46) | void EditTransform(const Camera& camera, matrix_t& matrix)
  function namespace (line 118) | namespace IMGUIZMO_NAMESPACE

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui.cpp
  type ImGui (line 939) | namespace ImGui
  function FreeWrapper (line 1020) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function FreeWrapper (line 1023) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function ImVec2 (line 1391) | ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, con...
  function ImBezierCubicClosestPointCasteljauStep (line 1414) | static void ImBezierCubicClosestPointCasteljauStep(const ImVec2& p, ImVe...
  function ImVec2 (line 1449) | ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2...
  function ImVec2 (line 1459) | ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2...
  function ImTriangleContainsPoint (line 1472) | bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImV...
  function ImTriangleBarycentricCoords (line 1480) | void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const...
  function ImVec2 (line 1491) | ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const Im...
  function ImStricmp (line 1512) | int ImStricmp(const char* str1, const char* str2)
  function ImStrnicmp (line 1519) | int ImStrnicmp(const char* str1, const char* str2, size_t count)
  function ImStrncpy (line 1526) | void ImStrncpy(char* dst, const char* src, size_t count)
  function ImStrlenW (line 1562) | int ImStrlenW(const ImWchar* str)
  function ImWchar (line 1577) | const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf...
  function ImStrTrimBlanks (line 1607) | void ImStrTrimBlanks(char* buf)
  function ImFormatString (line 1647) | int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
  function ImFormatStringV (line 1665) | int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list...
  function ImGuiID (line 1707) | ImGuiID ImHashData(const void* data_p, size_t data_size, ImU32 seed)
  function ImGuiID (line 1723) | ImGuiID ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
  function ImFileHandle (line 1758) | ImFileHandle ImFileOpen(const char* filename, const char* mode)
  function ImFileClose (line 1776) | bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
  function ImU64 (line 1777) | ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return (...
  function ImU64 (line 1778) | ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)   ...
  function ImU64 (line 1779) | ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandl...
  function ImTextCharFromUtf8 (line 1831) | int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, cons...
  function ImTextStrFromUtf8 (line 1883) | int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, c...
  function ImTextCountCharsFromUtf8 (line 1901) | int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
  function ImTextCharToUtf8_inline (line 1916) | static inline int ImTextCharToUtf8_inline(char* buf, int buf_size, unsig...
  function ImTextCountUtf8BytesFromChar (line 1959) | int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_tex...
  function ImTextCountUtf8BytesFromChar (line 1965) | static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
  function ImTextStrToUtf8 (line 1974) | int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_t...
  function ImTextCountUtf8BytesFromStr (line 1990) | int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* i...
  function IMGUI_API (line 2009) | IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
  function ImVec4 (line 2018) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
  function ImU32 (line 2028) | ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
  type StaticFunc (line 2120) | struct StaticFunc
    method PairComparerByID (line 2122) | PairComparerByID(const void* lhs, const void* rhs)
  function GetSkipItemForListClipping (line 2416) | static bool GetSkipItemForListClipping()
  function ImGuiListClipper_SortAndFuseRanges (line 2470) | static void ImGuiListClipper_SortAndFuseRanges(ImVector<ImGuiListClipper...
  function ImGuiListClipper_SeekCursorAndSetupPrevLine (line 2494) | static void ImGuiListClipper_SeekCursorAndSetupPrevLine(float pos_y, flo...
  function ImGuiListClipper_SeekCursorForItem (line 2519) | static void ImGuiListClipper_SeekCursorForItem(ImGuiListClipper* clipper...
  function ImGuiStyle (line 2727) | ImGuiStyle& ImGui::GetStyle()
  function ImU32 (line 2733) | ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
  function ImU32 (line 2741) | ImU32 ImGui::GetColorU32(const ImVec4& col)
  function ImVec4 (line 2749) | const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
  function ImU32 (line 2755) | ImU32 ImGui::GetColorU32(ImU32 col)
  type ImGuiStyleVarInfo (line 2798) | struct ImGuiStyleVarInfo
  function ImGuiStyleVarInfo (line 2835) | static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
  function ImGuiID (line 3231) | ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
  function ImGuiID (line 3242) | ImGuiID ImGuiWindow::GetID(const void* ptr)
  function ImGuiID (line 3253) | ImGuiID ImGuiWindow::GetID(int n)
  function ImGuiID (line 3264) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
  function ImGuiID (line 3274) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr)
  function ImGuiID (line 3284) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n)
  function ImGuiID (line 3295) | ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
  function SetCurrentWindow (line 3304) | static void SetCurrentWindow(ImGuiWindow* window)
  function ImGuiID (line 3397) | ImGuiID ImGui::GetHoveredID()
  function IsWindowContentHoverable (line 3425) | static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHo...
  function ImGuiContext (line 3635) | ImGuiContext* ImGui::GetCurrentContext()
  function ImGuiContext (line 3664) | ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
  function ImGuiID (line 3684) | ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook*...
  function ImGuiIO (line 3713) | ImGuiIO& ImGui::GetIO()
  function ImDrawData (line 3720) | ImDrawData* ImGui::GetDrawData()
  function ImDrawList (line 3737) | static ImDrawList* GetViewportDrawList(ImGuiViewportP* viewport, size_t ...
  function ImDrawList (line 3761) | ImDrawList* ImGui::GetBackgroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 3766) | ImDrawList* ImGui::GetBackgroundDrawList()
  function ImDrawList (line 3772) | ImDrawList* ImGui::GetForegroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 3777) | ImDrawList* ImGui::GetForegroundDrawList()
  function ImDrawListSharedData (line 3783) | ImDrawListSharedData* ImGui::GetDrawListSharedData()
  function IsWindowActiveAndVisible (line 3905) | static bool IsWindowActiveAndVisible(ImGuiWindow* window)
  function StartLockWheelingWindow (line 4037) | static void StartLockWheelingWindow(ImGuiWindow* window)
  function ImGuiKeyModFlags (line 4209) | ImGuiKeyModFlags ImGui::GetMergedKeyModFlags()
  function AddWindowToSortBuffer (line 4550) | static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_win...
  function AddDrawListToDrawData (line 4566) | static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDra...
  function AddWindowToDrawData (line 4601) | static void AddWindowToDrawData(ImGuiWindow* window, int layer)
  function GetWindowDisplayLayer (line 4615) | static inline int GetWindowDisplayLayer(ImGuiWindow* window)
  function AddRootWindowToDrawData (line 4621) | static inline void AddRootWindowToDrawData(ImGuiWindow* window)
  function SetupViewportDrawData (line 4644) | static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVector<ImD...
  function ImGuiWindow (line 4711) | ImGuiWindow* ImGui::FindBottomMostVisibleWindowWithinBeginStack(ImGuiWin...
  function ImVec2 (line 4917) | ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool ...
  function FindHoveredWindow (line 4947) | static void FindHoveredWindow()
  function ImVec2 (line 5120) | ImVec2 ImGui::GetItemRectMin()
  function ImVec2 (line 5126) | ImVec2 ImGui::GetItemRectMax()
  function ImVec2 (line 5132) | ImVec2 ImGui::GetItemRectSize()
  function SetWindowConditionAllowFlags (line 5266) | static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond ...
  function ImGuiWindow (line 5273) | ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
  function ImGuiWindow (line 5279) | ImGuiWindow* ImGui::FindWindowByName(const char* name)
  function ApplyWindowSettings (line 5285) | static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings...
  function UpdateWindowInFocusOrderList (line 5293) | static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_...
  function ImGuiWindow (line 5316) | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags f...
  function ImVec2 (line 5364) | static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const I...
  function CalcWindowContentSizes (line 5399) | static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_...
  function ImVec2 (line 5419) | static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& s...
  function ImVec2 (line 5457) | ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window)
  function ImGuiCol (line 5467) | static ImGuiCol GetWindowBgColorIdx(ImGuiWindow* window)
  function CalcResizePosSizeFromAnyCorner (line 5476) | static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const Im...
  type ImGuiResizeGripDef (line 5491) | struct ImGuiResizeGripDef
  type ImGuiResizeBorderDef (line 5506) | struct ImGuiResizeBorderDef
  function ImRect (line 5520) | static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, flo...
  function ImGuiID (line 5534) | ImGuiID ImGui::GetWindowResizeCornerID(ImGuiWindow* window, int n)
  function ImGuiID (line 5544) | ImGuiID ImGui::GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir)
  function ClampWindowRect (line 5686) | static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& vi...
  function ImGuiWindow (line 5919) | static ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
  function ImGuiWindow (line 6926) | static ImGuiWindow* GetCombinedRootWindow(ImGuiWindow* window, bool popu...
  function ImVec2 (line 7063) | ImVec2 ImGui::GetWindowPos()
  function ImVec2 (line 7102) | ImVec2 ImGui::GetWindowSize()
  function ImDrawList (line 7276) | ImDrawList* ImGui::GetWindowDrawList()
  function ImFont (line 7282) | ImFont* ImGui::GetFont()
  function ImVec2 (line 7292) | ImVec2 ImGui::GetFontTexUvWhitePixel()
  function ImGuiStorage (line 7374) | ImGuiStorage* ImGui::GetStateStorage()
  function ImGuiID (line 7425) | ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGui...
  function ImGuiID (line 7442) | ImGuiID ImGui::GetID(const char* str_id)
  function ImGuiID (line 7448) | ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
  function ImGuiID (line 7454) | ImGuiID ImGui::GetID(const void* ptr_id)
  function ImGuiKeyData (line 7496) | ImGuiKeyData* ImGui::GetKeyData(ImGuiKey key)
  function ImVec2 (line 7686) | ImVec2 ImGui::GetMousePos()
  function ImVec2 (line 7693) | ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
  function ImVec2 (line 7725) | ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_thre...
  function ImGuiMouseCursor (line 7746) | ImGuiMouseCursor ImGui::GetMouseCursor()
  function ImVec2 (line 8297) | ImVec2 ImGui::GetCursorScreenPos()
  function ImVec2 (line 8312) | ImVec2 ImGui::GetCursorPos()
  function ImVec2 (line 8351) | ImVec2 ImGui::GetCursorStartPos()
  function ImVec2 (line 8437) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
  function ImVec2 (line 8485) | ImVec2 ImGui::GetContentRegionMax()
  function ImVec2 (line 8496) | ImVec2 ImGui::GetContentRegionMaxAbs()
  function ImVec2 (line 8506) | ImVec2 ImGui::GetContentRegionAvail()
  function ImVec2 (line 8513) | ImVec2 ImGui::GetWindowContentRegionMin()
  function ImVec2 (line 8519) | ImVec2 ImGui::GetWindowContentRegionMax()
  function CalcScrollEdgeSnap (line 8624) | static float CalcScrollEdgeSnap(float target, float snap_min, float snap...
  function ImVec2 (line 8633) | static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
  function ImVec2 (line 8685) | ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rec...
  function ImGuiWindow (line 8973) | ImGuiWindow* ImGui::GetTopMostPopupModal()
  function ImGuiWindow (line 8983) | ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
  function ImVec2 (line 9342) | ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const I...
  function ImRect (line 9417) | ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window)
  function ImVec2 (line 9427) | ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
  function ImGuiDir (line 9508) | ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
  function NavScoreItemDistInterval (line 9515) | static float inline NavScoreItemDistInterval(float a0, float a1, float b...
  function NavClampRectToVisibleAreaForMoveDir (line 9524) | static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir...
  function ImGuiWindow (line 9879) | static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* win...
  function ImVec2 (line 9950) | static ImVec2 ImGui::NavCalcPreferredRefPos()
  function ImVec2 (line 10012) | ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, Im...
  function ImGuiWindow (line 10670) | static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int ...
  function NavUpdateWindowingHighlightWindow (line 10679) | static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
  function ImGuiPayload (line 11169) | const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGui...
  function ImGuiPayload (line 11206) | const ImGuiPayload* ImGui::GetDragDropPayload()
  function LogTextV (line 11229) | static inline void LogTextV(ImGuiContext& g, const char* fmt, va_list args)
  function ImGuiWindowSettings (line 11528) | ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
  function ImGuiWindowSettings (line 11550) | ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
  function ImGuiWindowSettings (line 11559) | ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
  function ImGuiSettingsHandler (line 11566) | ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
  function WindowSettingsHandler_ClearAll (line 11699) | static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_ReadLine (line 11717) | static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsH...
  function WindowSettingsHandler_ApplyAll (line 11728) | static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_WriteAll (line 11740) | static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSetti...
  function ImGuiViewport (line 11786) | ImGuiViewport* ImGui::GetMainViewport()
  function SetClipboardTextFn_DefaultImpl (line 11860) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 11887) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 11942) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetPlatformImeDataFn_DefaultImpl (line 11962) | static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, Im...
  function SetPlatformImeDataFn_DefaultImpl (line 11993) | static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport*, ImGuiPlatfo...
  function RenderViewportsThumbnails (line 12048) | static void RenderViewportsThumbnails()
  function MetricsHelpMarker (line 12070) | static void MetricsHelpMarker(const char* desc)
  type ImGui (line 12084) | namespace ImGui { void ShowFontAtlas(ImFontAtlas* atlas); }
  type Funcs (line 12120) | struct Funcs
    method ImRect (line 12122) | static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
    method ImRect (line 12141) | static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
  type Func (line 12249) | struct Func { static int IMGUI_CDECL WindowComparerByBeginOrder(const vo...
    method WindowComparerByBeginOrder (line 12249) | WindowComparerByBeginOrder(const void* lhs, const void* rhs) { return ...

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui.h
  type ImDrawChannel (line 134) | struct ImDrawChannel
  type ImDrawCmd (line 135) | struct ImDrawCmd
  type ImDrawData (line 136) | struct ImDrawData
  type ImDrawList (line 137) | struct ImDrawList
  type ImDrawListSharedData (line 138) | struct ImDrawListSharedData
  type ImDrawListSplitter (line 139) | struct ImDrawListSplitter
  type ImDrawVert (line 140) | struct ImDrawVert
  type ImFont (line 141) | struct ImFont
  type ImFontAtlas (line 142) | struct ImFontAtlas
  type ImFontBuilderIO (line 143) | struct ImFontBuilderIO
  type ImFontConfig (line 144) | struct ImFontConfig
  type ImFontGlyph (line 145) | struct ImFontGlyph
  type ImFontGlyphRangesBuilder (line 146) | struct ImFontGlyphRangesBuilder
  type ImColor (line 147) | struct ImColor
  type ImGuiContext (line 148) | struct ImGuiContext
  type ImGuiIO (line 149) | struct ImGuiIO
  type ImGuiInputTextCallbackData (line 150) | struct ImGuiInputTextCallbackData
  type ImGuiKeyData (line 151) | struct ImGuiKeyData
  type ImGuiListClipper (line 152) | struct ImGuiListClipper
  type ImGuiOnceUponAFrame (line 153) | struct ImGuiOnceUponAFrame
  type ImGuiPayload (line 154) | struct ImGuiPayload
  type ImGuiPlatformImeData (line 155) | struct ImGuiPlatformImeData
  type ImGuiSizeCallbackData (line 156) | struct ImGuiSizeCallbackData
  type ImGuiStorage (line 157) | struct ImGuiStorage
  type ImGuiStyle (line 158) | struct ImGuiStyle
  type ImGuiTableSortSpecs (line 159) | struct ImGuiTableSortSpecs
  type ImGuiTableColumnSortSpecs (line 160) | struct ImGuiTableColumnSortSpecs
  type ImGuiTextBuffer (line 161) | struct ImGuiTextBuffer
  type ImGuiTextFilter (line 162) | struct ImGuiTextFilter
  type ImGuiViewport (line 163) | struct ImGuiViewport
  type ImGuiCol (line 169) | typedef int ImGuiCol;
  type ImGuiCond (line 170) | typedef int ImGuiCond;
  type ImGuiDataType (line 171) | typedef int ImGuiDataType;
  type ImGuiDir (line 172) | typedef int ImGuiDir;
  type ImGuiKey (line 173) | typedef int ImGuiKey;
  type ImGuiNavInput (line 174) | typedef int ImGuiNavInput;
  type ImGuiMouseButton (line 175) | typedef int ImGuiMouseButton;
  type ImGuiMouseCursor (line 176) | typedef int ImGuiMouseCursor;
  type ImGuiSortDirection (line 177) | typedef int ImGuiSortDirection;
  type ImGuiStyleVar (line 178) | typedef int ImGuiStyleVar;
  type ImGuiTableBgTarget (line 179) | typedef int ImGuiTableBgTarget;
  type ImDrawFlags (line 180) | typedef int ImDrawFlags;
  type ImDrawListFlags (line 181) | typedef int ImDrawListFlags;
  type ImFontAtlasFlags (line 182) | typedef int ImFontAtlasFlags;
  type ImGuiBackendFlags (line 183) | typedef int ImGuiBackendFlags;
  type ImGuiButtonFlags (line 184) | typedef int ImGuiButtonFlags;
  type ImGuiColorEditFlags (line 185) | typedef int ImGuiColorEditFlags;
  type ImGuiConfigFlags (line 186) | typedef int ImGuiConfigFlags;
  type ImGuiComboFlags (line 187) | typedef int ImGuiComboFlags;
  type ImGuiDragDropFlags (line 188) | typedef int ImGuiDragDropFlags;
  type ImGuiFocusedFlags (line 189) | typedef int ImGuiFocusedFlags;
  type ImGuiHoveredFlags (line 190) | typedef int ImGuiHoveredFlags;
  type ImGuiInputTextFlags (line 191) | typedef int ImGuiInputTextFlags;
  type ImGuiKeyModFlags (line 192) | typedef int ImGuiKeyModFlags;
  type ImGuiPopupFlags (line 193) | typedef int ImGuiPopupFlags;
  type ImGuiSelectableFlags (line 194) | typedef int ImGuiSelectableFlags;
  type ImGuiSliderFlags (line 195) | typedef int ImGuiSliderFlags;
  type ImGuiTabBarFlags (line 196) | typedef int ImGuiTabBarFlags;
  type ImGuiTabItemFlags (line 197) | typedef int ImGuiTabItemFlags;
  type ImGuiTableFlags (line 198) | typedef int ImGuiTableFlags;
  type ImGuiTableColumnFlags (line 199) | typedef int ImGuiTableColumnFlags;
  type ImGuiTableRowFlags (line 200) | typedef int ImGuiTableRowFlags;
  type ImGuiTreeNodeFlags (line 201) | typedef int ImGuiTreeNodeFlags;
  type ImGuiViewportFlags (line 202) | typedef int ImGuiViewportFlags;
  type ImGuiWindowFlags (line 203) | typedef int ImGuiWindowFlags;
  type ImDrawIdx (line 216) | typedef unsigned short ImDrawIdx;
  type ImGuiID (line 220) | typedef unsigned int        ImGuiID;
  type ImS8 (line 221) | typedef signed char         ImS8;
  type ImU8 (line 222) | typedef unsigned char       ImU8;
  type ImS16 (line 223) | typedef signed short        ImS16;
  type ImU16 (line 224) | typedef unsigned short      ImU16;
  type ImS32 (line 225) | typedef signed int          ImS32;
  type ImU32 (line 226) | typedef unsigned int        ImU32;
  type ImS64 (line 227) | typedef signed   long long  ImS64;
  type ImU64 (line 228) | typedef unsigned long long  ImU64;
  type ImWchar16 (line 232) | typedef unsigned short ImWchar16;
  type ImWchar32 (line 233) | typedef unsigned int ImWchar32;
  type ImWchar32 (line 235) | typedef ImWchar32 ImWchar;
  type ImWchar16 (line 237) | typedef ImWchar16 ImWchar;
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 248) | IM_MSVC_RUNTIME_CHECKS_OFF
  function const (line 254) | float  operator[] (size_t idx) const    { IM_ASSERT(idx <= 1); return (&...
  function ImVec4 (line 262) | struct ImVec4
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 271) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiWindowFlags_ (line 943) | enum ImGuiWindowFlags_
  type ImGuiInputTextFlags_ (line 981) | enum ImGuiInputTextFlags_
  type ImGuiTreeNodeFlags_ (line 1012) | enum ImGuiTreeNodeFlags_
  type ImGuiPopupFlags_ (line 1041) | enum ImGuiPopupFlags_
  type ImGuiSelectableFlags_ (line 1057) | enum ImGuiSelectableFlags_
  type ImGuiComboFlags_ (line 1068) | enum ImGuiComboFlags_
  type ImGuiTabBarFlags_ (line 1082) | enum ImGuiTabBarFlags_
  type ImGuiTabItemFlags_ (line 1098) | enum ImGuiTabItemFlags_
  type ImGuiTableFlags_ (line 1133) | enum ImGuiTableFlags_
  type ImGuiTableColumnFlags_ (line 1190) | enum ImGuiTableColumnFlags_
  type ImGuiTableRowFlags_ (line 1232) | enum ImGuiTableRowFlags_
  type ImGuiTableBgTarget_ (line 1247) | enum ImGuiTableBgTarget_
  type ImGuiFocusedFlags_ (line 1256) | enum ImGuiFocusedFlags_
  type ImGuiHoveredFlags_ (line 1270) | enum ImGuiHoveredFlags_
  type ImGuiDragDropFlags_ (line 1288) | enum ImGuiDragDropFlags_
  type ImGuiDataType_ (line 1310) | enum ImGuiDataType_
  type ImGuiDir_ (line 1326) | enum ImGuiDir_
  type ImGuiSortDirection_ (line 1337) | enum ImGuiSortDirection_
  type ImGuiKey_ (line 1344) | enum ImGuiKey_
  type ImGuiKeyModFlags_ (line 1458) | enum ImGuiKeyModFlags_
  type ImGuiNavInput_ (line 1471) | enum ImGuiNavInput_
  type ImGuiConfigFlags_ (line 1501) | enum ImGuiConfigFlags_
  type ImGuiBackendFlags_ (line 1517) | enum ImGuiBackendFlags_
  type ImGuiCol_ (line 1527) | enum ImGuiCol_
  type ImGuiStyleVar_ (line 1592) | enum ImGuiStyleVar_
  type ImGuiButtonFlags_ (line 1624) | enum ImGuiButtonFlags_
  type ImGuiColorEditFlags_ (line 1637) | enum ImGuiColorEditFlags_
  type ImGuiSliderFlags_ (line 1682) | enum ImGuiSliderFlags_
  type ImGuiMouseButton_ (line 1699) | enum ImGuiMouseButton_
  type ImGuiMouseCursor_ (line 1709) | enum ImGuiMouseCursor_
  type ImGuiCond_ (line 1727) | enum ImGuiCond_
  type ImNewWrapper (line 1746) | struct ImNewWrapper {}
  function delete (line 1748) | inline void  operator delete(void*, ImNewWrapper, void*)   {}
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 1766) | IM_MSVC_RUNTIME_CHECKS_OFF
  function clear (line 1785) | inline void         clear()                             { if (Data) { Si...
  function clear_delete (line 1786) | inline void         clear_delete()                      { for (int n = 0...
  function clear_destruct (line 1787) | inline void         clear_destruct()                    { for (int n = 0...
  function size_in_bytes (line 1791) | inline int          size_in_bytes() const               { return Size * ...
  function T (line 1794) | inline T&           operator[](int i)                   { IM_ASSERT(i >=...
  function T (line 1795) | inline const T&     operator[](int i) const             { IM_ASSERT(i >=...
  function T (line 1797) | inline T*           begin()                             { return Data; }
  function T (line 1798) | inline const T*     begin() const                       { return Data; }
  function T (line 1799) | inline T*           end()                               { return Data + ...
  function T (line 1800) | inline const T*     end() const                         { return Data + ...
  function T (line 1801) | inline T&           front()                             { IM_ASSERT(Size...
  function T (line 1802) | inline const T&     front() const                       { IM_ASSERT(Size...
  function T (line 1804) | inline const T&     back() const                        { IM_ASSERT(Size...
  function _grow_capacity (line 1807) | inline int          _grow_capacity(int sz) const        { int new_capaci...
  function resize (line 1808) | inline void         resize(int new_size)                { if (new_size >...
  function resize (line 1809) | inline void         resize(int new_size, const T& v)    { if (new_size >...
  function shrink (line 1810) | inline void         shrink(int new_size)                { IM_ASSERT(new_...
  function reserve (line 1811) | inline void         reserve(int new_capacity)           { if (new_capaci...
  function push_back (line 1814) | inline void         push_back(const T& v)               { if (Size == Ca...
  function pop_back (line 1815) | inline void         pop_back()                          { IM_ASSERT(Size...
  function push_front (line 1816) | inline void         push_front(const T& v)              { if (Size == 0)...
  function T (line 1817) | inline T*           erase(const T* it)                  { IM_ASSERT(it >...
  function T (line 1818) | inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >...
  function T (line 1819) | inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >...
  function T (line 1820) | inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >...
  function contains (line 1821) | inline bool         contains(const T& v) const          { const T* data ...
  function T (line 1822) | inline T*           find(const T& v)                    { T* data = Data...
  function T (line 1823) | inline const T*     find(const T& v) const              { const T* data ...
  function find_erase (line 1824) | inline bool         find_erase(const T& v)              { const T* it = ...
  function find_erase_unsorted (line 1825) | inline bool         find_erase_unsorted(const T& v)     { const T* it = ...
  function index_from_ptr (line 1826) | inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 1828) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiKeyData (line 1895) | struct ImGuiKeyData
  type ImGuiIO (line 1903) | struct ImGuiIO
  function ClearSelection (line 2073) | struct ImGuiInputTextCallbackData
  type ImGuiSizeCallbackData (line 2104) | struct ImGuiSizeCallbackData
  function Clear (line 2113) | struct ImGuiPayload
  function IsDataType (line 2129) | bool IsDataType(const char* type) const { return DataFrameCount != -1 &&...
  type ImGuiTableColumnSortSpecs (line 2135) | struct ImGuiTableColumnSortSpecs
  type ImGuiTableSortSpecs (line 2149) | struct ImGuiTableSortSpecs
  type ImGuiOnceUponAFrame (line 2172) | struct ImGuiOnceUponAFrame
  function IsActive (line 2180) | struct ImGuiTextFilter
  type ImGuiTextBuffer (line 2207) | struct ImGuiTextBuffer
  function clear (line 2218) | void                clear()                 { Buf.clear(); }
  function reserve (line 2219) | void                reserve(int capacity)   { Buf.reserve(capacity); }
  function ImGuiStoragePair (line 2234) | struct ImGuiStorage
  function Clear (line 2251) | void                Clear() { Data.clear(); }
  type ImGuiListClipper (line 2297) | struct ImGuiListClipper
  type ImColor (line 2345) | struct ImColor
  function operator (line 2354) | inline operator ImU32() const                                   { return...
  function GetTexID (line 2394) | struct ImDrawCmd
  type ImDrawFlags_ (line 2461) | enum ImDrawFlags_
  type ImDrawListFlags_ (line 2481) | enum ImDrawListFlags_
  function ImDrawList (line 2499) | struct ImDrawList
  function ImVec2 (line 2529) | inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectSta...
  function PathClear (line 2566) | inline    void  PathClear()                                             ...
  function PathLineTo (line 2567) | inline    void  PathLineTo(const ImVec2& pos)                           ...
  function PathLineToMergeDuplicate (line 2568) | inline    void  PathLineToMergeDuplicate(const ImVec2& pos)             ...
  function PathFillConvex (line 2569) | inline    void  PathFillConvex(ImU32 col)                               ...
  function ChannelsSplit (line 2588) | inline void     ChannelsSplit(int count)    { _Splitter.Split(this, coun...
  function ChannelsMerge (line 2589) | inline void     ChannelsMerge()             { _Splitter.Merge(this); }
  function ChannelsSetCurrent (line 2590) | inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChanne...
  function PrimWriteVtx (line 2600) | inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 ...
  function PrimWriteIdx (line 2601) | inline    void  PrimWriteIdx(ImDrawIdx idx)                             ...
  function PrimVtx (line 2602) | inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) ...
  function Clear (line 2625) | struct ImDrawData
  type ImFontConfig (line 2647) | struct ImFontConfig
  type ImFontGlyph (line 2676) | struct ImFontGlyph
  function Clear (line 2688) | struct ImFontGlyphRangesBuilder
  function GetBit (line 2694) | inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32...
  function SetBit (line 2695) | inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32...
  function AddChar (line 2696) | inline void     AddChar(ImWchar c)      { SetBit(c); }
  type ImFontAtlasFlags_ (line 2716) | enum ImFontAtlasFlags_
  function SetTexID (line 2741) | struct ImFontAtlas
  function ImFontAtlasCustomRect (line 2796) | ImFontAtlasCustomRect*      GetCustomRectByIndex(int index) { IM_ASSERT(...
  type ImFont (line 2842) | struct ImFont
  type ImGuiViewportFlags_ (line 2898) | enum ImGuiViewportFlags_
  function GetCenter (line 2913) | struct ImGuiViewport
  function namespace (line 2961) | namespace ImGui
  function ListBoxFooter (line 2970) | static inline void  ListBoxFooter() { EndListBox(); }
  function DragFloat (line 2978) | static inline bool  DragFloat(const char* label, float* v, float v_speed...
  function DragFloat2 (line 2979) | static inline bool  DragFloat2(const char* label, float v[2], float v_sp...
  function DragFloat3 (line 2980) | static inline bool  DragFloat3(const char* label, float v[3], float v_sp...
  function DragFloat4 (line 2981) | static inline bool  DragFloat4(const char* label, float v[4], float v_sp...
  function SliderFloat (line 2984) | static inline bool  SliderFloat(const char* label, float* v, float v_min...
  function SliderFloat2 (line 2985) | static inline bool  SliderFloat2(const char* label, float v[2], float v_...
  function SliderFloat3 (line 2986) | static inline bool  SliderFloat3(const char* label, float v[3], float v_...
  function SliderFloat4 (line 2987) | static inline bool  SliderFloat4(const char* label, float v[4], float v_...
  function BeginPopupContextWindow (line 2989) | static inline bool  BeginPopupContextWindow(const char* str_id, ImGuiMou...
  type ImDrawFlags (line 3008) | typedef ImDrawFlags ImDrawCornerFlags;
  type ImDrawCornerFlags_ (line 3009) | enum ImDrawCornerFlags_

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui_demo.cpp
  function HelpMarker (line 191) | static void HelpMarker(const char* desc)
  function ShowDemoWindowWidgets (line 557) | static void ShowDemoWindowWidgets()
  function ShowDemoWindowLayout (line 2471) | static void ShowDemoWindowLayout()
  function ShowDemoWindowPopups (line 3254) | static void ShowDemoWindowPopups()
  type MyItemColumnID (line 3566) | enum MyItemColumnID
  type MyItem (line 3575) | struct MyItem
    method CompareWithSortSpecs (line 3591) | CompareWithSortSpecs(const void* lhs, const void* rhs)
  function PushStyleCompact (line 3624) | static void PushStyleCompact()
  function PopStyleCompact (line 3631) | static void PopStyleCompact()
  function EditTableSizingFlags (line 3637) | static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
  function EditTableColumnsFlags (line 3679) | static void EditTableColumnsFlags(ImGuiTableColumnFlags* p_flags)
  function ShowTableColumnsStatusFlags (line 3703) | static void ShowTableColumnsStatusFlags(ImGuiTableColumnFlags flags)
  function ShowDemoWindowTables (line 3711) | static void ShowDemoWindowTables()
  function ShowExampleAppConsole (line 6806) | static void ShowExampleAppConsole(bool* p_open)
  function Draw (line 6820) | struct ExampleAppLog
  function ShowExampleAppLog (line 6941) | static void ShowExampleAppLog(bool* p_open)
  function ShowExampleAppLayout (line 6976) | static void ShowExampleAppLayout(bool* p_open)
  function ShowPlaceholderObject (line 7042) | static void ShowPlaceholderObject(const char* prefix, int uid)
  function ShowExampleAppPropertyEditor (line 7090) | static void ShowExampleAppPropertyEditor(bool* p_open)
  function ShowExampleAppLongText (line 7126) | static void ShowExampleAppLongText(bool* p_open)
  function ShowExampleAppAutoResize (line 7189) | static void ShowExampleAppAutoResize(bool* p_open)
  function ShowExampleAppConstrainedResize (line 7214) | static void ShowExampleAppConstrainedResize(bool* p_open)
  function ShowExampleAppSimpleOverlay (line 7269) | static void ShowExampleAppSimpleOverlay(bool* p_open)
  function ShowExampleAppFullscreen (line 7317) | static void ShowExampleAppFullscreen(bool* p_open)
  function ShowExampleAppWindowTitles (line 7355) | static void ShowExampleAppWindowTitles(bool*)
  function ShowExampleAppCustomRendering (line 7389) | static void ShowExampleAppCustomRendering(bool* p_open)
  type MyDocument (line 7631) | struct MyDocument
    method MyDocument (line 7640) | MyDocument(const char* name, bool open = true, const ImVec4& color = I...
    method DoOpen (line 7648) | void DoOpen()       { Open = true; }
    method DoQueueClose (line 7649) | void DoQueueClose() { WantClose = true; }
    method DoForceClose (line 7650) | void DoForceClose() { Open = false; Dirty = false; }
    method DoSave (line 7651) | void DoSave()       { Dirty = false; }
    method DisplayContents (line 7654) | static void DisplayContents(MyDocument* doc)
    method DisplayContextMenu (line 7671) | static void DisplayContextMenu(MyDocument* doc)
  type ExampleAppDocuments (line 7686) | struct ExampleAppDocuments
    method ExampleAppDocuments (line 7690) | ExampleAppDocuments()
  function NotifyOfDocumentsClosedElsewhere (line 7709) | static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
  function ShowExampleAppDocuments (line 7720) | void ShowExampleAppDocuments(bool* p_open)

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui_draw.cpp
  function ImDrawList (line 440) | ImDrawList* ImDrawList::CloneOutput() const
  function ImVec2 (line 1229) | ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec...
  function ImVec2 (line 1239) | ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const I...
  function PathBezierCubicCurveToCasteljau (line 1249) | static void PathBezierCubicCurveToCasteljau(ImVector<ImVec2>* path, floa...
  function PathBezierQuadraticCurveToCasteljau (line 1274) | static void PathBezierQuadraticCurveToCasteljau(ImVector<ImVec2>* path, ...
  function ImDrawFlags (line 1323) | static inline ImDrawFlags FixRectCornerFlags(ImDrawFlags flags)
  function ImFont (line 2074) | ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
  function Decode85Byte (line 2110) | static unsigned int Decode85Byte(char c)                                ...
  function Decode85 (line 2111) | static void         Decode85(const unsigned char* src, unsigned char* dst)
  function ImFont (line 2123) | ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
  function ImFont (line 2144) | ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size...
  function ImFont (line 2166) | ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, ...
  function ImFont (line 2179) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compress...
  function ImFont (line 2191) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* co...
  function ImFontAtlasBuildMultiplyCalcLookupTable (line 2289) | void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[...
  function ImFontAtlasBuildMultiplyRectAlpha8 (line 2298) | void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256...
  type ImFontBuildSrcData (line 2309) | struct ImFontBuildSrcData
  type ImFontBuildDstData (line 2324) | struct ImFontBuildDstData
  function UnpackBitVectorToFlatIndexList (line 2332) | static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVect...
  function ImFontAtlasBuildWithStbTruetype (line 2344) | static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
  function ImFontBuilderIO (line 2596) | const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
  function ImFontAtlasBuildSetupFont (line 2605) | void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontC...
  function ImFontAtlasBuildPackCustomRects (line 2620) | void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_con...
  function ImFontAtlasBuildRender8bppRectFromString (line 2647) | void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x,...
  function ImFontAtlasBuildRender32bppRectFromString (line 2657) | void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x...
  function ImFontAtlasBuildRenderDefaultTexData (line 2667) | static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildRenderLinesTexData (line 2707) | static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildInit (line 2759) | void ImFontAtlasBuildInit(ImFontAtlas* atlas)
  function ImFontAtlasBuildFinish (line 2780) | void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
  function ImWchar (line 2810) | const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
  function ImWchar (line 2820) | const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
  function ImWchar (line 2833) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
  function UnpackAccumulativeOffsetsIntoRanges (line 2849) | static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, cons...
  function ImWchar (line 2863) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
  function ImWchar (line 2931) | const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
  function ImWchar (line 3021) | const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
  function ImWchar (line 3034) | const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
  function ImWchar (line 3046) | const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
  function ImWchar (line 3142) | static ImWchar FindFirstExistingGlyph(ImFont* font, const ImWchar* candi...
  function ImFontGlyph (line 3312) | const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
  function ImFontGlyph (line 3322) | const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
  function ImVec2 (line 3431) | ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_wid...
  function ImAcos01 (line 3834) | static inline float ImAcos01(float x)
  function stb_decompress_length (line 3969) | static unsigned int stb_decompress_length(const unsigned char *input)
  function stb__match (line 3977) | static void stb__match(const unsigned char *data, unsigned int length)
  function stb__lit (line 3986) | static void stb__lit(const unsigned char *data, unsigned int length)
  function stb_adler32 (line 4016) | static unsigned int stb_adler32(unsigned int adler32, unsigned char *buf...
  function stb_decompress (line 4047) | static unsigned int stb_decompress(unsigned char *output, const unsigned...

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui_internal.h
  type ImBitVector (line 113) | struct ImBitVector
  type ImRect (line 114) | struct ImRect
  type ImDrawDataBuilder (line 115) | struct ImDrawDataBuilder
  type ImDrawListSharedData (line 116) | struct ImDrawListSharedData
  type ImGuiColorMod (line 117) | struct ImGuiColorMod
  type ImGuiContext (line 118) | struct ImGuiContext
  type ImGuiContextHook (line 119) | struct ImGuiContextHook
  type ImGuiDataTypeInfo (line 120) | struct ImGuiDataTypeInfo
  type ImGuiGroupData (line 121) | struct ImGuiGroupData
  type ImGuiInputTextState (line 122) | struct ImGuiInputTextState
  type ImGuiLastItemData (line 123) | struct ImGuiLastItemData
  type ImGuiMenuColumns (line 124) | struct ImGuiMenuColumns
  type ImGuiNavItemData (line 125) | struct ImGuiNavItemData
  type ImGuiMetricsConfig (line 126) | struct ImGuiMetricsConfig
  type ImGuiNextWindowData (line 127) | struct ImGuiNextWindowData
  type ImGuiNextItemData (line 128) | struct ImGuiNextItemData
  type ImGuiOldColumnData (line 129) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 130) | struct ImGuiOldColumns
  type ImGuiPopupData (line 131) | struct ImGuiPopupData
  type ImGuiSettingsHandler (line 132) | struct ImGuiSettingsHandler
  type ImGuiStackSizes (line 133) | struct ImGuiStackSizes
  type ImGuiStyleMod (line 134) | struct ImGuiStyleMod
  type ImGuiTabBar (line 135) | struct ImGuiTabBar
  type ImGuiTabItem (line 136) | struct ImGuiTabItem
  type ImGuiTable (line 137) | struct ImGuiTable
  type ImGuiTableColumn (line 138) | struct ImGuiTableColumn
  type ImGuiTableTempData (line 139) | struct ImGuiTableTempData
  type ImGuiTableSettings (line 140) | struct ImGuiTableSettings
  type ImGuiTableColumnsSettings (line 141) | struct ImGuiTableColumnsSettings
  type ImGuiWindow (line 142) | struct ImGuiWindow
  type ImGuiWindowTempData (line 143) | struct ImGuiWindowTempData
  type ImGuiWindowSettings (line 144) | struct ImGuiWindowSettings
  type ImGuiLayoutType (line 147) | typedef int ImGuiLayoutType;
  type ImGuiActivateFlags (line 148) | typedef int ImGuiActivateFlags;
  type ImGuiItemFlags (line 149) | typedef int ImGuiItemFlags;
  type ImGuiItemStatusFlags (line 150) | typedef int ImGuiItemStatusFlags;
  type ImGuiOldColumnFlags (line 151) | typedef int ImGuiOldColumnFlags;
  type ImGuiNavHighlightFlags (line 152) | typedef int ImGuiNavHighlightFlags;
  type ImGuiNavDirSourceFlags (line 153) | typedef int ImGuiNavDirSourceFlags;
  type ImGuiNavMoveFlags (line 154) | typedef int ImGuiNavMoveFlags;
  type ImGuiNextItemDataFlags (line 155) | typedef int ImGuiNextItemDataFlags;
  type ImGuiNextWindowDataFlags (line 156) | typedef int ImGuiNextWindowDataFlags;
  type ImGuiScrollFlags (line 157) | typedef int ImGuiScrollFlags;
  type ImGuiSeparatorFlags (line 158) | typedef int ImGuiSeparatorFlags;
  type ImGuiTextFlags (line 159) | typedef int ImGuiTextFlags;
  type ImGuiTooltipFlags (line 160) | typedef int ImGuiTooltipFlags;
  function namespace (line 177) | namespace ImStb
  function ImQsort (line 305) | static inline void      ImQsort(void* base, size_t count, size_t size_of...
  function ImIsPowerOfTwo (line 312) | static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 ...
  function ImIsPowerOfTwo (line 313) | static inline bool      ImIsPowerOfTwo(ImU64 v)         { return v != 0 ...
  function ImUpperPowerOfTwo (line 314) | static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >>...
  function ImCharIsBlankA (line 335) | static inline bool      ImCharIsBlankA(char c)          { return c == ' ...
  function ImCharIsBlankW (line 336) | static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ...
  function ImFileHandle (line 374) | static inline ImFileHandle  ImFileOpen(const char*, const char*)        ...
  function ImFileClose (line 375) | static inline bool          ImFileClose(ImFileHandle)                   ...
  function ImU64 (line 376) | static inline ImU64         ImFileGetSize(ImFileHandle)                 ...
  function ImU64 (line 377) | static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle...
  function ImU64 (line 378) | static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFil...
  type FILE (line 381) | typedef FILE* ImFileHandle;
  function ImPow (line 406) | static inline float  ImPow(float x, float y)    { return powf(x, y); }
  function ImPow (line 407) | static inline double ImPow(double x, double y)  { return pow(x, y); }
  function ImLog (line 408) | static inline float  ImLog(float x)             { return logf(x); }
  function ImLog (line 409) | static inline double ImLog(double x)            { return log(x); }
  function ImAbs (line 410) | static inline int    ImAbs(int x)               { return x < 0 ? -x : x; }
  function ImAbs (line 411) | static inline float  ImAbs(float x)             { return fabsf(x); }
  function ImAbs (line 412) | static inline double ImAbs(double x)            { return fabs(x); }
  function ImSign (line 413) | static inline float  ImSign(float x)            { return (x < 0.0f) ? -1...
  function ImSign (line 414) | static inline double ImSign(double x)           { return (x < 0.0) ? -1....
  function ImRsqrt (line 416) | static inline float  ImRsqrt(float x)           { return _mm_cvtss_f32(_...
  function ImRsqrt (line 418) | static inline float  ImRsqrt(float x)           { return 1.0f / sqrtf(x); }
  function ImRsqrt (line 420) | static inline double ImRsqrt(double x)          { return 1.0 / sqrt(x); }
  function T (line 424) | inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ?...
  function T (line 425) | inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ...
  function T (line 426) | inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? ...
  function T (line 427) | inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b ...
  function ImSwap (line 428) | inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; ...
  function T (line 429) | inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < ...
  function T (line 430) | inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < ...
  function ImVec2 (line 432) | static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 433) | static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 434) | static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 m...
  function ImVec2 (line 435) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)  ...
  function ImVec2 (line 436) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVe...
  function ImVec4 (line 437) | static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)  ...
  function ImSaturate (line 438) | static inline float  ImSaturate(float f)                                ...
  function ImLengthSqr (line 439) | static inline float  ImLengthSqr(const ImVec2& lhs)                     ...
  function ImLengthSqr (line 440) | static inline float  ImLengthSqr(const ImVec4& lhs)                     ...
  function ImInvLength (line 441) | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)   ...
  function ImFloor (line 442) | static inline float  ImFloor(float f)                                   ...
  function ImFloorSigned (line 443) | static inline float  ImFloorSigned(float f)                             ...
  function ImVec2 (line 444) | static inline ImVec2 ImFloor(const ImVec2& v)                           ...
  function ImVec2 (line 445) | static inline ImVec2 ImFloorSigned(const ImVec2& v)                     ...
  function ImModPositive (line 446) | static inline int    ImModPositive(int a, int b)                        ...
  function ImDot (line 447) | static inline float  ImDot(const ImVec2& a, const ImVec2& b)            ...
  function ImVec2 (line 448) | static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)...
  function ImLinearSweep (line 449) | static inline float  ImLinearSweep(float current, float target, float sp...
  function ImVec2 (line 450) | static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImIsFloatAboveGuaranteedIntegerPrecision (line 451) | static inline bool   ImIsFloatAboveGuaranteedIntegerPrecision(float f)  ...
  function ImTriangleArea (line 463) | inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, co...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 468) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImVec2ih (line 477) | struct ImVec2ih
  function explicit (line 482) | explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs....
  function ImRect (line 487) | struct IMGUI_API ImRect
  function Contains (line 506) | bool        Contains(const ImVec2& p) const     { return p.x     >= Min....
  function Contains (line 507) | bool        Contains(const ImRect& r) const     { return r.Min.x >= Min....
  function Overlaps (line 508) | bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max....
  function Add (line 509) | void        Add(const ImVec2& p)                { if (Min.x > p.x)     M...
  function Add (line 510) | void        Add(const ImRect& r)                { if (Min.x > r.Min.x) M...
  function Expand (line 511) | void        Expand(const float amount)          { Min.x -= amount;   Min...
  function Expand (line 512) | void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min...
  function Translate (line 513) | void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y +=...
  function TranslateX (line 514) | void        TranslateX(float dx)                { Min.x += dx; Max.x += ...
  function TranslateY (line 515) | void        TranslateY(float dy)                { Min.y += dy; Max.y += ...
  function ClipWith (line 516) | void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min...
  function ClipWithFull (line 517) | void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.M...
  function Floor (line 518) | void        Floor()                             { Min.x = IM_FLOOR(Min.x...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 522) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImBitArrayClearBit (line 526) | inline void     ImBitArrayClearBit(ImU32* arr, int n)           { ImU32 ...
  function ImBitArraySetBit (line 527) | inline void     ImBitArraySetBit(ImU32* arr, int n)             { ImU32 ...
  function ImBitArraySetBitRange (line 528) | inline void     ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Work...
  function ClearAllBits (line 548) | void            ClearAllBits()              { memset(Storage, 0, sizeof(...
  function SetAllBits (line 549) | void            SetAllBits()                { memset(Storage, 255, sizeo...
  function TestBit (line 550) | bool            TestBit(int n) const        { IM_ASSERT(n + OFFSET < BIT...
  function SetBit (line 551) | void            SetBit(int n)               { IM_ASSERT(n + OFFSET < BIT...
  function ClearBit (line 552) | void            ClearBit(int n)             { IM_ASSERT(n + OFFSET < BIT...
  function SetBitRange (line 553) | void            SetBitRange(int n, int n2)  { ImBitArraySetBitRange(Stor...
  function const (line 554) | bool            operator[](int n) const     { IM_ASSERT(n + OFFSET < BIT...
  function ImBitVector (line 559) | struct IMGUI_API ImBitVector
  function set (line 582) | inline void         set(T* data, int size)      { Data = data; DataEnd =...
  function set (line 583) | inline void         set(T* data, T* data_end)   { Data = data; DataEnd =...
  function T (line 586) | inline T&           operator[](int i)           { T* p = Data + i; IM_AS...
  function T (line 587) | inline const T&     operator[](int i) const     { const T* p = Data + i;...
  function T (line 589) | inline T*           begin()                     { return Data; }
  function T (line 590) | inline const T*     begin() const               { return Data; }
  function T (line 591) | inline T*           end()                       { return DataEnd; }
  function T (line 592) | inline const T*     end() const                 { return DataEnd; }
  function index_from_ptr (line 595) | inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data &...
  function GetArenaSizeInBytes (line 612) | inline int   GetArenaSizeInBytes()              { return CurrOff; }
  function SetArenaBasePtr (line 613) | inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_...
  function GetSpan (line 617) | void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin...
  type ImPoolIdx (line 623) | typedef int ImPoolIdx;
  function T (line 634) | T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(k...
  function T (line 635) | T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
  function ImPoolIdx (line 636) | ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Dat...
  function T (line 637) | T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIn...
  function Contains (line 638) | bool        Contains(const T* p) const          { return (p >= Buf.Data ...
  function Clear (line 639) | void        Clear()                             { for (int n = 0; n < Ma...
  function T (line 640) | T*          Add()                               { int idx = FreeIdx; if ...
  function Remove (line 641) | void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p...
  function Remove (line 642) | void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)...
  function Reserve (line 643) | void        Reserve(int capacity)               { Buf.reserve(capacity);...
  function T (line 650) | T*          TryGetMapData(ImPoolIdx n)          { int idx = Map.Data[n]....
  function GetSize (line 652) | int         GetSize()                           { return GetMapSize(); }
  function clear (line 666) | void    clear()                     { Buf.clear(); }
  function T (line 669) | T*      alloc_chunk(size_t sz)      { size_t HDR_SZ = 4; sz = IM_MEMALIG...
  function T (line 670) | T*      begin()                     { size_t HDR_SZ = 4; if (!Buf.Data) ...
  function T (line 671) | T*      next_chunk(T* p)            { size_t HDR_SZ = 4; IM_ASSERT(p >= ...
  function chunk_size (line 672) | int     chunk_size(const T* p)      { return ((const int*)p)[-1]; }
  function T (line 673) | T*      end()                       { return (T*)(void*)(Buf.Data + Buf....
  function offset_from_ptr (line 674) | int     offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end(...
  function T (line 675) | T*      ptr_from_offset(int off)    { IM_ASSERT(off >= 4 && off < Buf.Si...
  function swap (line 676) | void    swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
  function ImDrawListSharedData (line 712) | struct IMGUI_API ImDrawListSharedData
  function ClearFreeMemory (line 732) | struct ImDrawDataBuilder
  function GetDrawListCount (line 738) | int  GetDrawListCount() const   { int count = 0; for (int n = 0; n < IM_...
  function ImGuiComboPreviewData (line 948) | struct IMGUI_API ImGuiComboPreviewData
  function ImGuiGroupData (line 961) | struct IMGUI_API ImGuiGroupData
  function ImGuiMenuColumns (line 977) | struct IMGUI_API ImGuiMenuColumns
  function ImGuiInputTextState (line 996) | struct IMGUI_API ImGuiInputTextState
  type ImGuiPopupData (line 1032) | struct ImGuiPopupData
  type ImGuiNextItemDataFlags_ (line 1081) | enum ImGuiNextItemDataFlags_
  function ClearFlags (line 1088) | struct ImGuiNextItemData
  type ImGuiLastItemData (line 1101) | struct ImGuiLastItemData
  function ImGuiStackSizes (line 1113) | struct IMGUI_API ImGuiStackSizes
  type ImGuiWindowStackData (line 1131) | struct ImGuiWindowStackData
  type ImGuiShrinkWidthItem (line 1138) | struct ImGuiShrinkWidthItem
  function ImGuiPtrOrIndex (line 1144) | struct ImGuiPtrOrIndex
  type ImGuiKeyPrivate_ (line 1159) | enum ImGuiKeyPrivate_
  type ImGuiInputEventType (line 1167) | enum ImGuiInputEventType
  type ImGuiInputSource (line 1179) | enum ImGuiInputSource
  type ImGuiInputEventMousePos (line 1192) | struct ImGuiInputEventMousePos      { float PosX, PosY; }
  type ImGuiInputEventMouseWheel (line 1193) | struct ImGuiInputEventMouseWheel    { float WheelX, WheelY; }
  type ImGuiInputEventMouseButton (line 1194) | struct ImGuiInputEventMouseButton   { int Button; bool Down; }
  type ImGuiInputEventKey (line 1195) | struct ImGuiInputEventKey           { ImGuiKey Key; bool Down; float Ana...
  type ImGuiInputEventText (line 1196) | struct ImGuiInputEventText          { unsigned int Char; }
  type ImGuiInputEventAppFocused (line 1197) | struct ImGuiInputEventAppFocused    { bool Focused; }
  type ImGuiInputEvent (line 1199) | struct ImGuiInputEvent
  type ImGuiInputReadMode (line 1218) | enum ImGuiInputReadMode
  function FromPositions (line 1232) | struct ImGuiListClipperRange
  function Reset (line 1245) | struct ImGuiListClipperData
  type ImGuiActivateFlags_ (line 1261) | enum ImGuiActivateFlags_
  type ImGuiScrollFlags_ (line 1270) | enum ImGuiScrollFlags_
  type ImGuiNavHighlightFlags_ (line 1284) | enum ImGuiNavHighlightFlags_
  type ImGuiNavDirSourceFlags_ (line 1293) | enum ImGuiNavDirSourceFlags_
  type ImGuiNavMoveFlags_ (line 1302) | enum ImGuiNavMoveFlags_
  type ImGuiNavLayer (line 1320) | enum ImGuiNavLayer
  function Clear (line 1327) | struct ImGuiNavItemData
  type ImGuiOldColumnFlags_ (line 1347) | enum ImGuiOldColumnFlags_
  type ImGuiOldColumnData (line 1367) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 1377) | struct ImGuiOldColumns
  function ImGuiViewport (line 1420) | struct ImGuiViewportP : public ImGuiViewport
  type ImGuiWindowSettings (line 1453) | struct ImGuiWindowSettings
  type ImGuiSettingsHandler (line 1465) | struct ImGuiSettingsHandler
  type ImGuiStackLevelInfo (line 1508) | struct ImGuiStackLevelInfo
  type ImGuiStackTool (line 1519) | struct ImGuiStackTool
  type ImGuiContextHookType (line 1534) | enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiConte...
  type ImGuiContextHook (line 1536) | struct ImGuiContextHook
  type ImGuiContext (line 1551) | struct ImGuiContext
  function ImGuiWindowTempData (line 1964) | struct IMGUI_API ImGuiWindowTempData
  function ImGuiWindow (line 2011) | struct IMGUI_API ImGuiWindow
  type ImGuiTabBarFlagsPrivate_ (line 2132) | enum ImGuiTabBarFlagsPrivate_
  type ImGuiTabItemFlagsPrivate_ (line 2140) | enum ImGuiTabItemFlagsPrivate_
  type ImGuiTabItem (line 2148) | struct ImGuiTabItem
  function ImGuiTabBar (line 2166) | struct IMGUI_API ImGuiTabBar
  type ImS8 (line 2218) | typedef ImS8 ImGuiTableColumnIdx;
  type ImU8 (line 2219) | typedef ImU8 ImGuiTableDrawChannelIdx;
  type ImGuiTableCellData (line 2284) | struct ImGuiTableCellData
  function ImGuiTable (line 2291) | struct IMGUI_API ImGuiTable
  function ImGuiTableTempData (line 2404) | struct IMGUI_API ImGuiTableTempData
  type ImGuiTableSettings (line 2449) | struct ImGuiTableSettings
  function namespace (line 2467) | namespace ImGui
  function DebugStartItemPicker (line 2851) | inline void             DebugStartItemPicker()                          ...
  type ImFontBuilderIO (line 2878) | struct ImFontBuilderIO

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui_tables.cpp
  function ImGuiTableFlags (line 264) | inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow*...
  function ImGuiTable (line 297) | ImGuiTable* ImGui::TableFindByID(ImGuiID id)
  function TableSetupColumnFlags (line 655) | static void TableSetupColumnFlags(ImGuiTable* table, ImGuiTableColumn* c...
  function ImGuiTableColumnFlags (line 1557) | ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n)
  function ImRect (line 1576) | ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n)
  function ImGuiID (line 1591) | ImGuiID ImGui::TableGetColumnResizeID(const ImGuiTable* table, int colum...
  type MergeGroup (line 2336) | struct MergeGroup
    method MergeGroup (line 2342) | MergeGroup() { ChannelsCount = 0; }
  function ImGuiTableSortSpecs (line 2604) | ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
  function ImGuiSortDirection (line 2622) | static inline ImGuiSortDirection TableGetColumnAvailSortDirection(ImGuiT...
  function ImGuiSortDirection (line 2641) | ImGuiSortDirection ImGui::TableGetColumnNextSortDirection(ImGuiTableColu...
  function TableSettingsInit (line 3143) | static void TableSettingsInit(ImGuiTableSettings* settings, ImGuiID id, ...
  function TableSettingsCalcChunkSize (line 3155) | static size_t TableSettingsCalcChunkSize(int columns_count)
  function ImGuiTableSettings (line 3160) | ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_c...
  function ImGuiTableSettings (line 3169) | ImGuiTableSettings* ImGui::TableSettingsFindByID(ImGuiID id)
  function ImGuiTableSettings (line 3180) | ImGuiTableSettings* ImGui::TableGetBoundSettings(ImGuiTable* table)
  function TableSettingsHandler_ClearAll (line 3323) | static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ApplyAll (line 3333) | static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ReadLine (line 3363) | static void TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHa...
  function TableSettingsHandler_WriteAll (line 3389) | static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettin...
  function GetDraggedColumnOffset (line 3671) | static float GetDraggedColumnOffset(ImGuiOldColumns* columns, int column...
  function GetColumnWidthEx (line 3704) | static float GetColumnWidthEx(ImGuiOldColumns* columns, int column_index...
  function ImGuiOldColumns (line 3800) | ImGuiOldColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID...
  function ImGuiID (line 3813) | ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)

FILE: 3rdparty/Cinder-VNM/ui/imgui/imgui_widgets.cpp
  function ImGuiID (line 857) | ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
  function ImRect (line 863) | ImRect ImGui::GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis)
  function CalcMaxPopupHeightFromItemCount (line 1566) | static float CalcMaxPopupHeightFromItemCount(int items_count)
  function Items_ArrayGetter (line 1765) | static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
  function Items_SingleStringGetter (line 1774) | static bool Items_SingleStringGetter(void* data, int idx, const char** o...
  function ImGuiDataTypeInfo (line 1917) | const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
  function DataTypeCompareT (line 2043) | static int DataTypeCompareT(const T* lhs, const T* rhs)
  function DataTypeClampT (line 2071) | static bool DataTypeClampT(T* v, const T* v_min, const T* v_max)
  function GetMinimumStepAtDecimalPrecision (line 2099) | static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
  function SanitizeFormatString (line 2123) | static void SanitizeFormatString(const char* fmt, char* fmt_out, size_t ...
  function TYPE (line 2138) | TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType dat...
  function TYPE (line 2674) | TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE ...
  function ImParseFormatPrecision (line 3287) | int ImParseFormatPrecision(const char* fmt, int default_precision)
  function InputTextCalcTextLenAndLineCount (line 3555) | static int InputTextCalcTextLenAndLineCount(const char* text_begin, cons...
  function ImVec2 (line 3569) | static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const Im...
  type ImStb (line 3615) | namespace ImStb
    function STB_TEXTEDIT_STRINGLEN (line 3618) | static int     STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) ...
    function ImWchar (line 3619) | static ImWchar STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 3620) | static float   STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int lin...
    function STB_TEXTEDIT_KEYTOTEXT (line 3621) | static int     STB_TEXTEDIT_KEYTOTEXT(int key)                        ...
    function STB_TEXTEDIT_LAYOUTROW (line 3623) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTex...
    function is_separator (line 3637) | static bool is_separator(unsigned int c)                              ...
    function is_word_boundary_from_right (line 3638) | static int  is_word_boundary_from_right(ImGuiInputTextState* obj, int ...
    function is_word_boundary_from_left (line 3639) | static int  is_word_boundary_from_left(ImGuiInputTextState* obj, int i...
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 3640) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_MAC (line 3641) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_WIN (line 3646) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, i...
    function STB_TEXTEDIT_DELETECHARS (line 3650) | static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 3666) | static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos...
    function stb_textedit_replace (line 3722) | static void stb_textedit_replace(ImGuiInputTextState* str, STB_Textedi...
  function InputTextFilterCharacter (line 3805) | static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTex...
  function ColorEditRestoreHS (line 4803) | static void ColorEditRestoreHS(const float* col, float* H, float* S, flo...
  function RenderArrowsForVerticalBar (line 5072) | static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos...
  type ImGuiPlotArrayGetterData (line 6550) | struct ImGuiPlotArrayGetterData
    method ImGuiPlotArrayGetterData (line 6555) | ImGuiPlotArrayGetterData(const float* values, int stride) { Values = v...
  function Plot_ArrayGetter (line 6558) | static float Plot_ArrayGetter(void* data, int idx)
  function IsRootOfOpenMenuSet (line 6825) | static bool IsRootOfOpenMenuSet()
  type ImGuiTabBarSection (line 7148) | struct ImGuiTabBarSection
    method ImGuiTabBarSection (line 7154) | ImGuiTabBarSection() { memset(this, 0, sizeof(*this)); }
  type ImGui (line 7157) | namespace ImGui
  function TabItemGetSectionIdx (line 7175) | static inline int TabItemGetSectionIdx(const ImGuiTabItem* tab)
  function ImGuiTabBar (line 7198) | static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
  function ImGuiPtrOrIndex (line 7204) | static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
  function ImU32 (line 7555) | static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* ...
  function ImGuiTabItem (line 7576) | ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab...
  function ImGuiTabItem (line 7734) | static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 7795) | static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
  function ImVec2 (line 8132) | ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)

FILE: 3rdparty/Cinder-VNM/ui/imgui/imstb_rectpack.h
  type stbrp_context (line 80) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 81) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 82) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 85) | typedef int            stbrp_coord;
  type stbrp_coord (line 87) | typedef unsigned short stbrp_coord;
  type stbrp_rect (line 115) | struct stbrp_rect
  type stbrp_node (line 175) | struct stbrp_node
  type stbrp_context (line 181) | struct stbrp_context
  function STBRP_DEF (line 230) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 242) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 262) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 295) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 345) | typedef struct
  function stbrp__findresult (line 351) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 453) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 533) | static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
  function rect_original_order (line 545) | static int STBRP__CDECL rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 558) | STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects...

FILE: 3rdparty/Cinder-VNM/ui/imgui/imstb_textedit.h
  type StbUndoRecord (line 299) | typedef struct
  type StbUndoState (line 308) | typedef struct
  type STB_TexteditState (line 317) | typedef struct
  type StbTexteditRow (line 364) | typedef struct
  function stb_text_locate_coord (line 398) | static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, floa...
  function stb_textedit_click (line 458) | static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_drag (line 476) | static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditStat...
  type StbFindState (line 508) | typedef struct
  function stb_textedit_find_charpos (line 518) | static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_S...
  function stb_textedit_clamp (line 577) | static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_delete (line 591) | static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditSt...
  function stb_textedit_delete_selection (line 599) | static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_...
  function stb_textedit_sortselection (line 615) | static void stb_textedit_sortselection(STB_TexteditState *state)
  function stb_textedit_move_to_first (line 625) | static void stb_textedit_move_to_first(STB_TexteditState *state)
  function stb_textedit_move_to_last (line 636) | static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_Text...
  function is_word_boundary (line 648) | static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
  function stb_textedit_move_to_word_previous (line 654) | static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str,...
  function stb_textedit_move_to_word_next (line 669) | static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int...
  function stb_textedit_prep_selection_at_cursor (line 687) | static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
  function stb_textedit_cut (line 696) | static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_textedit_paste_internal (line 707) | static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_Tex...
  function stb_textedit_key (line 732) | static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState...
  function stb_textedit_flush_redo (line 1122) | static void stb_textedit_flush_redo(StbUndoState *state)
  function stb_textedit_discard_undo (line 1129) | static void stb_textedit_discard_undo(StbUndoState *state)
  function stb_textedit_discard_redo (line 1151) | static void stb_textedit_discard_redo(StbUndoState *state)
  function StbUndoRecord (line 1181) | static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, i...
  function STB_TEXTEDIT_CHARTYPE (line 1205) | static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, i...
  function stb_text_undo (line 1225) | static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_redo (line 1293) | static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_makeundo_insert (line 1344) | static void stb_text_makeundo_insert(STB_TexteditState *state, int where...
  function stb_text_makeundo_delete (line 1349) | static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_Texte...
  function stb_text_makeundo_replace (line 1359) | static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_Text...
  function stb_textedit_clear_state (line 1370) | static void stb_textedit_clear_state(STB_TexteditState *state, int is_si...
  function stb_textedit_initialize_state (line 1388) | static void stb_textedit_initialize_state(STB_TexteditState *state, int ...
  function stb_textedit_paste (line 1398) | static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditStat...

FILE: 3rdparty/Cinder-VNM/ui/imgui/imstb_truetype.h
  function my_stbtt_initfont (line 290) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 302) | void my_stbtt_print(float x, float y, char *text)
  function main (line 335) | int main(int argc, char **argv)
  function main (line 376) | int main(int arg, char **argv)
  type stbtt_uint8 (line 429) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 430) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 431) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 432) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 433) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 434) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 514) | typedef struct
  type stbtt_bakedchar (line 528) | typedef struct
  type stbtt_aligned_quad (line 544) | typedef struct
  type stbtt_packedchar (line 576) | typedef struct
  type stbtt_pack_context (line 583) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 584) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 586) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 620) | typedef struct
  type stbtt_pack_context (line 679) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 714) | struct stbtt_fontinfo
  type stbtt_vertex (line 824) | typedef struct
  type stbtt__bitmap (line 907) | typedef struct
  function stbtt_uint8 (line 1116) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 1123) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 1130) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 1136) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 1141) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 1151) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 1164) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 1173) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 1187) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 1199) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 1214) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 1229) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 1237) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 1243) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 1269) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 1270) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 1271) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 1272) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 1277) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 1289) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 1302) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 1321) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 1337) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt_InitFont_internal (line 1350) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 1461) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 1554) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 1559) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 1568) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1590) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1606) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 1611) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 1623) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 1639) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 1865) | typedef struct
  function stbtt__track_vertex (line 1879) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 1888) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 1904) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 1910) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 1918) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 1925) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 1936) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 1950) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 1978) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 2237) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 2254) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 2265) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 2273) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function stbtt__GetGlyphKernInfoAdvance (line 2285) | static int  stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, i...
  function stbtt_int32 (line 2315) | static stbtt_int32  stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, ...
  function stbtt_int32 (line 2374) | static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
  function stbtt_int32 (line 2428) | static stbtt_int32  stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo ...
  function STBTT_DEF (line 2556) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 2569) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 2576) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 2581) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 2588) | STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2599) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2607) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 2613) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 2619) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 2629) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 2647) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 2652) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 2657) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 2666) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 2671) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 2699) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 2705) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 2715) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 2721) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 2743) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 2765) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 2790) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 2832) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 2936) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__fill_active_edges_new (line 2973) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 3137) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 3239) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 3257) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 3319) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 3325) | typedef struct
  function stbtt__rasterize (line 3330) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 3387) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 3395) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 3415) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 3458) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 3535) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 3548) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 3598) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 3617) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 3627) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
  function STBTT_DEF (line 3632) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 3642) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 3653) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 3699) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
  type stbrp_coord (line 3727) | typedef int stbrp_coord;
  type stbrp_context (line 3740) | typedef struct
  type stbrp_node (line 3746) | typedef struct
  type stbrp_rect (line 3751) | struct stbrp_rect
  function stbrp_init_target (line 3757) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 3768) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 3797) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 3829) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 3835) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function STBTT_DEF (line 3845) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
  function stbtt__h_prefilter (line 3852) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 3914) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 3976) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 3989) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 4021) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
  function STBTT_DEF (line 4045) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 4127) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 4132) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
  function STBTT_DEF (line 4168) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
  function STBTT_DEF (line 4180) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
  function STBTT_DEF (line 4193) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
  function stbtt__ray_intersect_bezier (line 4228) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
  function equal (line 4292) | static int equal(float *a, float *b)
  function stbtt__compute_crossings_x (line 4297) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
  function stbtt__cuberoot (line 4366) | static float stbtt__cuberoot( float x )
  function stbtt__solve_cubic (line 4375) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
  function STBTT_DEF (line 4597) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
  function stbtt_int32 (line 4608) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 4647) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 4654) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 4675) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 4722) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 4751) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 4767) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 4774) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 4779) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 4784) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 4789) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 4794) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...

FILE: 3rdparty/Cinder-VNM/ui/imgui_markdown/imgui_markdown.h
  function namespace (line 153) | namespace ImGui
  function RenderListTextWrapped (line 285) | void RenderListTextWrapped( const char* text_, const char* text_end_ )
  function ResetIndent (line 298) | void ResetIndent()
  type Line (line 312) | struct Line {
  type TextBlock (line 323) | struct TextBlock {                  // subset of line
  type Link (line 332) | struct Link {
  function UnderLine (line 345) | inline void UnderLine( ImColor col_ )
  function RenderLine (line 353) | inline void RenderLine( const char* markdown_, Line& line_, TextRegion& ...
  function RenderLinkTextWrapped (line 633) | inline void TextRegion::RenderLinkTextWrapped( const char* text_, const ...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/imgui_remote.h
  function namespace (line 15) | namespace ImGui {
  function IWebSocketServer (line 129) | struct WebSocketServer : public IWebSocketServer
  function RemoteGetInput (line 438) | bool RemoteGetInput( RemoteInput & input )
  function RemoteInit (line 462) | void RemoteInit( const char *local_address, int local_port )
  function RemoteShutdown (line 472) | void RemoteShutdown()
  function RemoteUpdate (line 482) | void RemoteUpdate()
  function RemoteDraw (line 493) | void RemoteDraw( ImDrawList** const cmd_lists, int cmd_lists_count )

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/imgui_remote_webby.h
  type IWebSocketServer (line 24) | struct IWebSocketServer
  type WebbyConnection (line 29) | struct WebbyConnection
  type WebbyConnection (line 30) | struct WebbyConnection
  type WebbyConnection (line 31) | struct WebbyConnection
  type WebbyConnection (line 32) | struct WebbyConnection
  type WebbyConnection (line 33) | struct WebbyConnection
  type WebbyWsFrame (line 33) | struct WebbyWsFrame
  function Update (line 35) | struct IWebSocketServer
  function Shutdown (line 96) | void Shutdown()
  function WsOnConnected (line 109) | void WsOnConnected( struct WebbyConnection *connection )
  function WsOnDisconnected (line 114) | void WsOnDisconnected( struct WebbyConnection * /*connection*/ )
  function WsOnFrame (line 120) | int WsOnFrame( struct WebbyConnection *connection, const struct WebbyWsF...
  function virtual (line 139) | virtual void OnMessage( OpCode /*opcode*/, const void * /*data*/, int /*...
  function virtual (line 140) | virtual void OnError() { }
  function virtual (line 142) | virtual void SendText( const void *data, int size )
  function virtual (line 150) | virtual void SendBinary( const void *data, int size )
  function onLog (line 160) | static void onLog( const char* /*text*/ )
  function onDispatch (line 165) | static int onDispatch( struct WebbyConnection * /*connection*/ )
  function onConnect (line 171) | static int onConnect( struct WebbyConnection * /*connection*/ )
  function onConnected (line 177) | static void onConnected( struct WebbyConnection *connection )
  function onDisconnected (line 183) | static void onDisconnected( struct WebbyConnection *connection )
  function onFrame (line 189) | static int onFrame( struct WebbyConnection *connection, const struct Web...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4.c
  type BYTE (line 159) | typedef  uint8_t BYTE;
  type U16 (line 160) | typedef uint16_t U16;
  type U32 (line 161) | typedef uint32_t U32;
  type S32 (line 162) | typedef  int32_t S32;
  type U64 (line 163) | typedef uint64_t U64;
  type BYTE (line 165) | typedef unsigned char       BYTE;
  type U16 (line 166) | typedef unsigned short      U16;
  type U32 (line 167) | typedef unsigned int        U32;
  type S32 (line 168) | typedef   signed int        S32;
  type U64 (line 169) | typedef unsigned long long  U64;
  function LZ4_64bits (line 178) | static unsigned LZ4_64bits(void) { return sizeof(void*)==8; }
  function LZ4_isLittleEndian (line 180) | static unsigned LZ4_isLittleEndian(void)
  function U16 (line 187) | static U16 LZ4_readLE16(const void* memPtr)
  function LZ4_writeLE16 (line 198) | static void LZ4_writeLE16(void* memPtr, U16 value)
  function U16 (line 214) | static U16 LZ4_read16(const void* memPtr)
  function U32 (line 226) | static U32 LZ4_read32(const void* memPtr)
  function U64 (line 238) | static U64 LZ4_read64(const void* memPtr)
  function LZ4_read_ARCH (line 250) | static size_t LZ4_read_ARCH(const void* p)
  function LZ4_copy4 (line 259) | static void LZ4_copy4(void* dstPtr, const void* srcPtr)
  function LZ4_copy8 (line 269) | static void LZ4_copy8(void* dstPtr, const void* srcPtr)
  function LZ4_wildCopy (line 286) | static void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd)
  function LZ4_NbCommonBytes (line 327) | static unsigned LZ4_NbCommonBytes (register size_t val)
  function LZ4_count (line 394) | static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYT...
  function LZ4_versionNumber (line 428) | int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; }
  function LZ4_compressBound (line 429) | int LZ4_compressBound(int isize)  { return LZ4_COMPRESSBOUND(isize); }
  type LZ4_stream_t_internal (line 435) | typedef struct {
  type limitedOutput_directive (line 444) | typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive;
  type tableType_t (line 445) | typedef enum { byPtr, byU32, byU16 } tableType_t;
  type dict_directive (line 447) | typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive;
  type dictIssue_directive (line 448) | typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive;
  type endCondition_directive (line 450) | typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_di...
  type earlyEnd_directive (line 451) | typedef enum { full = 0, partial = 1 } earlyEnd_directive;
  function U32 (line 459) | static U32 LZ4_hashSequence(U32 sequence, tableType_t tableType)
  function U32 (line 467) | static U32 LZ4_hashPosition(const BYTE* p, tableType_t tableType) { retu...
  function LZ4_putPositionOnHash (line 469) | static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase,...
  function LZ4_putPosition (line 479) | static void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t ...
  function BYTE (line 485) | static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableTy...
  function BYTE (line 492) | static const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, table...
  function LZ4_compress_generic (line 498) | static int LZ4_compress_generic(
  function LZ4_compress (line 710) | int LZ4_compress(const char* source, char* dest, int inputSize)
  function LZ4_compress_limitedOutput (line 730) | int LZ4_compress_limitedOutput(const char* source, char* dest, int input...
  function LZ4_resetStream (line 760) | void LZ4_resetStream (LZ4_stream_t* LZ4_stream)
  function LZ4_stream_t (line 765) | LZ4_stream_t* LZ4_createStream(void)
  function LZ4_freeStream (line 773) | int LZ4_freeStream (LZ4_stream_t* LZ4_stream)
  function LZ4_loadDict (line 780) | int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int di...
  function LZ4_renormDictT (line 812) | static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE*...
  function FORCE_INLINE (line 833) | FORCE_INLINE int LZ4_compress_continue_generic (void* LZ4_stream, const ...
  function LZ4_compress_continue (line 883) | int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source,...
  function LZ4_compress_limitedOutput_continue (line 888) | int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const...
  function LZ4_compress_forceExtDict (line 895) | int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* sourc...
  function LZ4_saveDict (line 915) | int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize)
  function FORCE_INLINE (line 942) | FORCE_INLINE int LZ4_decompress_generic(
  function LZ4_decompress_safe (line 1121) | int LZ4_decompress_safe(const char* source, char* dest, int compressedSi...
  function LZ4_decompress_safe_partial (line 1126) | int LZ4_decompress_safe_partial(const char* source, char* dest, int comp...
  function LZ4_decompress_fast (line 1131) | int LZ4_decompress_fast(const char* source, char* dest, int originalSize)
  type LZ4_streamDecode_t_internal (line 1139) | typedef struct
  function LZ4_streamDecode_t (line 1152) | LZ4_streamDecode_t* LZ4_createStreamDecode(void)
  function LZ4_freeStreamDecode (line 1158) | int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream)
  function LZ4_setStreamDecode (line 1171) | int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const cha...
  function LZ4_decompress_safe_continue (line 1188) | int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, ...
  function LZ4_decompress_fast_continue (line 1217) | int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, ...
  function FORCE_INLINE (line 1254) | FORCE_INLINE int LZ4_decompress_usingDict_generic(const char* source, ch...
  function LZ4_decompress_safe_usingDict (line 1267) | int LZ4_decompress_safe_usingDict(const char* source, char* dest, int co...
  function LZ4_decompress_fast_usingDict (line 1272) | int LZ4_decompress_fast_usingDict(const char* source, char* dest, int or...
  function LZ4_decompress_safe_forceExtDict (line 1278) | int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int...
  function LZ4_uncompress (line 1293) | int LZ4_uncompress (const char* source, char* dest, int outputSize) { re...
  function LZ4_uncompress_unknownOutputSize (line 1294) | int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, in...
  function LZ4_sizeofStreamState (line 1299) | int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; }
  function LZ4_init (line 1301) | static void LZ4_init(LZ4_stream_t_internal* lz4ds, const BYTE* base)
  function LZ4_resetStreamState (line 1307) | int LZ4_resetStreamState(void* state, const char* inputBuffer)
  function LZ4_sizeofState (line 1330) | int LZ4_sizeofState() { return LZ4_STREAMSIZE; }
  function LZ4_compress_withState (line 1332) | int LZ4_compress_withState (void* state, const char* source, char* dest,...
  function LZ4_compress_limitedOutput_withState (line 1343) | int LZ4_compress_limitedOutput_withState (void* state, const char* sourc...
  function LZ4_decompress_safe_withPrefix64k (line 1356) | int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, in...
  function LZ4_decompress_fast_withPrefix64k (line 1361) | int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, in...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4.h
  type LZ4_stream_t (line 184) | typedef struct { long long table[LZ4_STREAMSIZE_U64]; } LZ4_stream_t;
  type LZ4_streamDecode_t (line 242) | typedef struct { unsigned long long table[LZ4_STREAMDECODESIZE_U64]; } L...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame.c
  type BYTE (line 78) | typedef  uint8_t BYTE;
  type U16 (line 79) | typedef uint16_t U16;
  type U32 (line 80) | typedef uint32_t U32;
  type S32 (line 81) | typedef  int32_t S32;
  type U64 (line 82) | typedef uint64_t U64;
  type BYTE (line 84) | typedef unsigned char       BYTE;
  type U16 (line 85) | typedef unsigned short      U16;
  type U32 (line 86) | typedef unsigned int        U32;
  type S32 (line 87) | typedef   signed int        S32;
  type U64 (line 88) | typedef unsigned long long  U64;
  type LZ4F_cctx_internal_t (line 115) | typedef struct
  type LZ4F_dctx_internal_t (line 130) | typedef struct
  function U32 (line 164) | U32 LZ4F_isError(LZ4F_errorCode_t code)
  function LZ4F_getBlockSize (line 180) | static size_t LZ4F_getBlockSize(unsigned blockSizeID)
  function LZ4F_writeLE32 (line 192) | static void LZ4F_writeLE32 (BYTE* dstPtr, U32 value32)
  function U32 (line 200) | static U32 LZ4F_readLE32 (const BYTE* srcPtr)
  function BYTE (line 210) | static BYTE LZ4F_headerChecksum (const BYTE* header, size_t length)
  function LZ4F_compressFrameBound (line 220) | size_t LZ4F_compressFrameBound(size_t srcSize, const LZ4F_preferences_t*...
  function LZ4F_compressFrame (line 259) | size_t LZ4F_compressFrame(void* dstBuffer, size_t dstMaxSize, const void...
  function LZ4F_errorCode_t (line 328) | LZ4F_errorCode_t LZ4F_createCompressionContext(LZ4F_compressionContext_t...
  function LZ4F_errorCode_t (line 344) | LZ4F_errorCode_t LZ4F_freeCompressionContext(LZ4F_compressionContext_t L...
  function LZ4F_compressBegin (line 362) | size_t LZ4F_compressBegin(LZ4F_compressionContext_t compressionContext, ...
  function LZ4F_compressBound (line 437) | size_t LZ4F_compressBound(size_t srcSize, const LZ4F_preferences_t* pref...
  function LZ4F_compressBlock (line 455) | static size_t LZ4F_compressBlock(void* dst, const void* src, size_t srcS...
  function LZ4F_localLZ4_compress_limitedOutput_withState (line 472) | static int LZ4F_localLZ4_compress_limitedOutput_withState(void* ctx, con...
  function LZ4F_localLZ4_compress_limitedOutput_continue (line 478) | static int LZ4F_localLZ4_compress_limitedOutput_continue(void* ctx, cons...
  function LZ4F_localLZ4_compressHC_limitedOutput_continue (line 484) | static int LZ4F_localLZ4_compressHC_limitedOutput_continue(void* ctx, co...
  function compressFunc_t (line 490) | static compressFunc_t LZ4F_selectCompression(blockMode_t blockMode, U32 ...
  function LZ4F_localSaveDict (line 501) | static int LZ4F_localSaveDict(LZ4F_cctx_internal_t* cctxPtr)
  type LZ4F_lastBlockStatus (line 508) | typedef enum { notDone, fromTmpBuffer, fromSrcBuffer } LZ4F_lastBlockSta...
  function LZ4F_compressUpdate (line 519) | size_t LZ4F_compressUpdate(LZ4F_compressionContext_t compressionContext,...
  function LZ4F_flush (line 628) | size_t LZ4F_flush(LZ4F_compressionContext_t compressionContext, void* ds...
  function LZ4F_compressEnd (line 671) | size_t LZ4F_compressEnd(LZ4F_compressionContext_t compressionContext, vo...
  function LZ4F_errorCode_t (line 711) | LZ4F_errorCode_t LZ4F_createDecompressionContext(LZ4F_compressionContext...
  function LZ4F_errorCode_t (line 723) | LZ4F_errorCode_t LZ4F_freeDecompressionContext(LZ4F_compressionContext_t...
  function LZ4F_decodeHeader (line 735) | static size_t LZ4F_decodeHeader(LZ4F_dctx_internal_t* dctxPtr, const BYT...
  type dStage_t (line 806) | typedef enum { dstage_getHeader=0, dstage_storeHeader, dstage_decodeHeader,
  function LZ4F_errorCode_t (line 825) | LZ4F_errorCode_t LZ4F_getFrameInfo(LZ4F_decompressionContext_t decompres...
  function LZ4F_decompress_safe (line 847) | static int LZ4F_decompress_safe (const char* source, char* dest, int com...
  function LZ4F_updateDict (line 856) | static void LZ4F_updateDict(LZ4F_dctx_internal_t* dctxPtr, const BYTE* d...
  function LZ4F_decompress (line 949) | size_t LZ4F_decompress(LZ4F_decompressionContext_t decompressionContext,

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame.h
  type LZ4F_errorCode_t (line 57) | typedef size_t LZ4F_errorCode_t;
  type blockSizeID_t (line 66) | typedef enum { LZ4F_default=0, max64KB=4, max256KB=5, max1MB=6, max4MB=7...
  type blockMode_t (line 67) | typedef enum { blockLinked=0, blockIndependent} blockMode_t;
  type contentChecksum_t (line 68) | typedef enum { noContentChecksum=0, contentChecksumEnabled } contentChec...
  type LZ4F_frameInfo_t (line 70) | typedef struct {
  type LZ4F_preferences_t (line 77) | typedef struct {
  type LZ4F_compressOptions_t (line 108) | typedef struct {
  type LZ4F_decompressOptions_t (line 185) | typedef struct {

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame_static.h
  type LZ4F_errorCodes (line 61) | typedef enum { LZ4F_LIST_ERRORS(LZ4F_GENERATE_ENUM) } LZ4F_errorCodes;

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4hc.c
  type LZ4HC_Data_Structure (line 86) | typedef struct
  function U32 (line 108) | static U32 LZ4HC_hashPtr(const void* ptr) { return HASH_FUNCTION(LZ4_rea...
  function LZ4HC_init (line 115) | static void LZ4HC_init (LZ4HC_Data_Structure* hc4, const BYTE* start)
  function FORCE_INLINE (line 130) | FORCE_INLINE void LZ4HC_Insert (LZ4HC_Data_Structure* hc4, const BYTE* ip)
  function FORCE_INLINE (line 152) | FORCE_INLINE int LZ4HC_InsertAndFindBestMatch (LZ4HC_Data_Structure* hc4...
  function FORCE_INLINE (line 206) | FORCE_INLINE int LZ4HC_InsertAndGetWiderMatch (
  type limitedOutput_directive (line 279) | typedef enum { noLimit = 0, limitedOutput = 1 } limitedOutput_directive;
  function FORCE_INLINE (line 286) | FORCE_INLINE int LZ4HC_encodeSequence (
  function LZ4HC_compress_generic (line 330) | static int LZ4HC_compress_generic (
  function LZ4_compressHC2 (line 534) | int LZ4_compressHC2(const char* source, char* dest, int inputSize, int c...
  function LZ4_compressHC (line 541) | int LZ4_compressHC(const char* source, char* dest, int inputSize) { retu...
  function LZ4_compressHC2_limitedOutput (line 543) | int LZ4_compressHC2_limitedOutput(const char* source, char* dest, int in...
  function LZ4_compressHC_limitedOutput (line 550) | int LZ4_compressHC_limitedOutput(const char* source, char* dest, int inp...
  function LZ4_sizeofStateHC (line 559) | int LZ4_sizeofStateHC(void) { return sizeof(LZ4HC_Data_Structure); }
  function LZ4_compressHC2_withStateHC (line 562) | int LZ4_compressHC2_withStateHC (void* state, const char* source, char* ...
  function LZ4_compressHC_withStateHC (line 569) | int LZ4_compressHC_withStateHC (void* state, const char* source, char* d...
  function LZ4_compressHC2_limitedOutput_withStateHC (line 573) | int LZ4_compressHC2_limitedOutput_withStateHC (void* state, const char* ...
  function LZ4_compressHC_limitedOutput_withStateHC (line 580) | int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* s...
  function LZ4_streamHC_t (line 589) | LZ4_streamHC_t* LZ4_createStreamHC(void) { return (LZ4_streamHC_t*)mallo...
  function LZ4_freeStreamHC (line 590) | int LZ4_freeStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr) { free(LZ4_stream...
  function LZ4_resetStreamHC (line 594) | void LZ4_resetStreamHC (LZ4_streamHC_t* LZ4_streamHCPtr, int compression...
  function LZ4_loadDictHC (line 601) | int LZ4_loadDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, const char* diction...
  function LZ4HC_setExternalDict (line 618) | static void LZ4HC_setExternalDict(LZ4HC_Data_Structure* ctxPtr, const BY...
  function LZ4_compressHC_continue_generic (line 631) | static int LZ4_compressHC_continue_generic (LZ4HC_Data_Structure* ctxPtr,
  function LZ4_compressHC_continue (line 667) | int LZ4_compressHC_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char...
  function LZ4_compressHC_limitedOutput_continue (line 672) | int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCP...
  function LZ4_saveDictHC (line 680) | int LZ4_saveDictHC (LZ4_streamHC_t* LZ4_streamHCPtr, char* safeBuffer, i...
  function LZ4_sizeofStreamStateHC (line 703) | int LZ4_sizeofStreamStateHC(void) { return LZ4_STREAMHCSIZE; }
  function LZ4_resetStreamStateHC (line 705) | int LZ4_resetStreamStateHC(void* state, const char* inputBuffer)
  function LZ4_freeHC (line 719) | int LZ4_freeHC (void* LZ4HC_Data)
  function LZ4_compressHC2_continue (line 736) | int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char...
  function LZ4_compressHC2_limitedOutput_continue (line 741) | int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4hc.h
  type LZ4_streamHC_t (line 110) | typedef struct { unsigned long long table[LZ4_STREAMHCSIZE_U64]; } LZ4_s...

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/xxhash.c
  function XXH_free (line 94) | static void  XXH_free  (void* p)  { free(p); }
  type BYTE (line 108) | typedef uint8_t  BYTE;
  type U16 (line 109) | typedef uint16_t U16;
  type U32 (line 110) | typedef uint32_t U32;
  type S32 (line 111) | typedef  int32_t S32;
  type U64 (line 112) | typedef uint64_t U64;
  type BYTE (line 114) | typedef unsigned char      BYTE;
  type U16 (line 115) | typedef unsigned short     U16;
  type U32 (line 116) | typedef unsigned int       U32;
  type S32 (line 117) | typedef   signed int       S32;
  type U64 (line 118) | typedef unsigned long long U64;
  type _PACKED (line 135) | typedef struct _U32_S
  type _PACKED (line 139) | typedef struct _U64_S
  function U32 (line 173) | static U32 XXH_swap32 (U32 x)
  function U64 (line 180) | static U64 XXH_swap64 (U64 x)
  type XXH_endianess (line 213) | typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
  type XXH_alignment (line 229) | typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
  function FORCE_INLINE (line 231) | FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endia...
  function FORCE_INLINE (line 239) | FORCE_INLINE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
  function FORCE_INLINE (line 244) | FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endia...
  function FORCE_INLINE (line 252) | FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
  function FORCE_INLINE (line 261) | FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 s...
  function XXH32 (line 338) | unsigned int XXH32 (const void* input, size_t len, unsigned seed)
  function FORCE_INLINE (line 366) | FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 s...
  function XXH64 (line 478) | unsigned long long XXH64 (const void* input, size_t len, unsigned long l...
  type XXH_istate32_t (line 511) | typedef struct
  type XXH_istate64_t (line 523) | typedef struct
  function XXH32_state_t (line 536) | XXH32_state_t* XXH32_createState(void)
  function XXH_errorcode (line 541) | XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
  function XXH64_state_t (line 547) | XXH64_state_t* XXH64_createState(void)
  function XXH_errorcode (line 552) | XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
  function XXH_errorcode (line 561) | XXH_errorcode XXH32_reset(XXH32_state_t* state_in, U32 seed)
  function XXH_errorcode (line 574) | XXH_errorcode XXH64_reset(XXH64_state_t* state_in, unsigned long long seed)
  function FORCE_INLINE (line 588) | FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state_in,...
  function XXH_errorcode (line 677) | XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void* input, ...
  function FORCE_INLINE (line 689) | FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state_in, XXH...
  function U32 (line 731) | U32 XXH32_digest (const XXH32_state_t* state_in)
  function FORCE_INLINE (line 742) | FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state_in,...
  function XXH_errorcode (line 831) | XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void* input, ...
  function FORCE_INLINE (line 843) | FORCE_INLINE U64 XXH64_digest_endian (const XXH64_state_t* state_in, XXH...
  function XXH64_digest (line 925) | unsigned long long XXH64_digest (const XXH64_state_t* state_in)

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/lz4/xxhash.h
  type XXH_errorcode (line 76) | typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
  type XXH32_state_t (line 103) | typedef struct { long long ll[ 6]; } XXH32_state_t;
  type XXH64_state_t (line 104) | typedef struct { long long ll[11]; } XXH64_state_t;

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby.c
  type WebbyHeader (line 36) | struct WebbyHeader
  type WebbyConnection (line 46) | struct WebbyConnection
  type WebbyRequest (line 47) | struct WebbyRequest
  type WebbyBuffer (line 66) | struct WebbyBuffer
  type WebbyConnectionPrv (line 73) | struct WebbyConnectionPrv
  type WebbyServer (line 93) | struct WebbyServer
  function dbg (line 102) | static void dbg(struct WebbyServer *srv, const char *fmt, ...)
  function make_connection_blocking (line 118) | static int make_connection_blocking(struct WebbyConnectionPrv *conn)
  function make_connection_nonblocking (line 134) | static int make_connection_nonblocking(struct WebbyConnectionPrv *conn)
  function url_decode (line 161) | static size_t url_decode(const char *src, size_t src_len, char *dst, siz...
  function WebbyFindQueryVar (line 190) | int WebbyFindQueryVar(const char *buf, const char *name, char *dst, size...
  function base64_bufsize (line 234) | static size_t base64_bufsize(size_t input_size)
  function base64_encode (line 243) | static int base64_encode(char* output, size_t output_size, const unsigne...
  function sha1_rol (line 286) | static unsigned int sha1_rol(unsigned int value, unsigned int bits)
  type sha1 (line 291) | struct sha1 {
  function sha1_hash_block (line 298) | static void sha1_hash_block(unsigned int state[5], const unsigned char *...
  function sha1_init (line 337) | static void sha1_init(struct sha1 *s)
  function sha1_update (line 349) | static void sha1_update(struct sha1 *s, const void *data_, size_t size)
  function sha1_final (line 381) | static void sha1_final(unsigned char digest[20], struct sha1 *s)
  function discard_incoming_data (line 417) | static int discard_incoming_data(struct WebbyConnection* conn, int count)
  type WebbyConnection (line 432) | struct WebbyConnection
  function WebbyServerMemoryNeeded (line 447) | int
  type WebbyServer (line 457) | struct WebbyServer
  type WebbyServerConfig (line 458) | struct WebbyServerConfig
  type WebbyServer (line 461) | struct WebbyServer
  type WebbyServer (line 461) | struct WebbyServer
  type WebbyServer (line 471) | struct WebbyServer
  type WebbyConnectionPrv (line 472) | struct WebbyConnectionPrv
  type sockaddr_in (line 515) | struct sockaddr_in
  type sockaddr (line 524) | struct sockaddr
  function WebbyServerShutdown (line 549) | void WebbyServerShutdown(struct WebbyServer *srv)
  function wb_config_incoming_socket (line 562) | static int wb_config_incoming_socket(webby_socket_t socket)
  function reset_connection (line 579) | static void reset_connection(struct WebbyServer *srv, struct WebbyConnec...
  function wb_on_incoming (line 594) | static int wb_on_incoming(struct WebbyServer *srv)
  function wb_peek_request_size (line 644) | static int wb_peek_request_size(const unsigned char *buf, int len)
  function tok_inplace (line 689) | static int tok_inplace(char *buf, const char* separator, char *tokens[],...
  function wb_close_client (line 723) | static void wb_close_client(struct WebbyServer *srv, struct WebbyConnect...
  function send_fully (line 736) | static int send_fully(webby_socket_t socket, const unsigned char *buffer...
  function wb_setup_request (line 753) | static int wb_setup_request(struct WebbyServer *srv, struct WebbyConnect...
  function wb_fill_buffer (line 842) | static int wb_fill_buffer(struct WebbyServer *srv, struct WebbyBuffer *b...
  function is_websocket_request (line 889) | static int is_websocket_request(struct WebbyConnection* conn)
  function send_websocket_upgrade (line 909) | static int send_websocket_upgrade(struct WebbyServer *srv, struct WebbyC...
  function scan_websocket_frame (line 968) | static int scan_websocket_frame(const struct WebbyBuffer *buf, struct We...
  function wb_update_client (line 1032) | static void wb_update_client(struct WebbyServer *srv, struct WebbyConnec...
  function WebbyServerUpdate (line 1307) | void
  function wb_flush (line 1398) | static int wb_flush(struct WebbyBuffer *buf, webby_socket_t socket)
  function wb_push (line 1409) | static int wb_push(struct WebbyServer *srv, struct WebbyConnectionPrv *c...
  function WebbyPrintf (line 1450) | int WebbyPrintf(struct WebbyConnection* conn, const char* fmt, ...)
  function WebbyBeginResponse (line 1493) | int WebbyBeginResponse(
  function make_websocket_header (line 1559) | static size_t make_websocket_header(unsigned char buffer[10], unsigned c...
  function WebbyBeginSocketFrame (line 1588) | int
  function WebbyEndSocketFrame (line 1599) | int
  function read_buffered_data (line 1615) | static int read_buffered_data(int *data_left, struct WebbyBuffer* buffer...
  function WebbyRead (line 1637) | int WebbyRead(struct WebbyConnection *conn, void *ptr_, size_t len)
  function WebbyWrite (line 1689) | int WebbyWrite(struct WebbyConnection *conn, const void *ptr, size_t len)
  function WebbyEndResponse (line 1728) | void WebbyEndResponse(struct WebbyConnection *conn)
  function WebbySendFrame (line 1744) | int

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby.h
  type WebbyServer (line 27) | struct WebbyServer
  type WebbyHeader (line 30) | struct WebbyHeader
  type WebbyRequest (line 37) | struct WebbyRequest
  type WebbyConnection (line 56) | struct WebbyConnection
  type WebbyWsFrame (line 81) | struct WebbyWsFrame
  type WebbyServerConfig (line 92) | struct WebbyServerConfig
  type WebbyServerConfig (line 159) | struct WebbyServerConfig
  type WebbyServer (line 165) | struct WebbyServer
  type WebbyServerConfig (line 166) | struct WebbyServerConfig
  type WebbyServer (line 170) | struct WebbyServer
  type WebbyServer (line 174) | struct WebbyServer
  type WebbyConnection (line 188) | struct WebbyConnection
  type WebbyHeader (line 191) | struct WebbyHeader
  type WebbyConnection (line 202) | struct WebbyConnection
  type WebbyConnection (line 208) | struct WebbyConnection
  type WebbyConnection (line 216) | struct WebbyConnection
  type WebbyConnection (line 222) | struct WebbyConnection
  type WebbyConnection (line 228) | struct WebbyConnection
  type WebbyConnection (line 238) | struct WebbyConnection
  type WebbyConnection (line 242) | struct WebbyConnection
  type WebbyConnection (line 245) | struct WebbyConnection

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby_unix.h
  type webby_socket_t (line 9) | typedef int webby_socket_t;
  type socklen_t (line 10) | typedef socklen_t webby_socklen_t;
  function wb_socket_error (line 15) | static int wb_socket_error(void)
  function wb_valid_socket (line 20) | static int wb_valid_socket(webby_socket_t socket)
  function wb_close_socket (line 25) | static void wb_close_socket(webby_socket_t socket)
  function wb_is_blocking_error (line 30) | static int wb_is_blocking_error(int error)
  function wb_set_blocking (line 35) | static int wb_set_blocking(webby_socket_t socket, int blocking)

FILE: 3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby_win32.h
  type SOCKET (line 4) | typedef SOCKET webby_socket_t;
  type webby_socklen_t (line 15) | typedef int webby_socklen_t;
  function wb_socket_error (line 17) | static int wb_socket_error(void)
  function strcasecmp (line 23) | static int strcasecmp(const char *a, const char *b)
  function strncasecmp (line 28) | static int strncasecmp(const char *a, const char *b, size_t len)
  function wb_set_blocking (line 34) | static int wb_set_blocking(webby_socket_t socket, int blocking)
  function wb_valid_socket (line 40) | static int wb_valid_socket(webby_socket_t socket)
  function wb_close_socket (line 45) | static void wb_close_socket(webby_socket_t socket)
  function wb_is_blocking_error (line 50) | static int wb_is_blocking_error(int error)

FILE: 3rdparty/Cinder-VNM/ui/implot/implot.cpp
  type ImPlot (line 191) | namespace ImPlot {
    function ImVec4 (line 237) | ImVec4 GetAutoColor(ImPlotCol idx) {
    type ImPlotStyleVarInfo (line 265) | struct ImPlotStyleVarInfo {
    function ImPlotStyleVarInfo (line 305) | static const ImPlotStyleVarInfo* GetPlotStyleVarInfo(ImPlotStyleVar id...
    function AddTextVertical (line 315) | void AddTextVertical(ImDrawList *DrawList, ImVec2 pos, ImU32 col, cons...
    function AddTextCentered (line 358) | void AddTextCentered(ImDrawList* DrawList, ImVec2 top_center, ImU32 co...
    function NiceNum (line 373) | double NiceNum(double x, bool round) {
    function SetImGuiContext (line 402) | void SetImGuiContext(ImGuiContext* ctx) {
    function ImPlotContext (line 406) | ImPlotContext* CreateContext() {
    function DestroyContext (line 414) | void DestroyContext(ImPlotContext* ctx) {
    function ImPlotContext (line 422) | ImPlotContext* GetCurrentContext() {
    function SetCurrentContext (line 426) | void SetCurrentContext(ImPlotContext* ctx) {
    function Initialize (line 433) | void Initialize(ImPlotContext* ctx) {
    function ResetCtxForNextPlot (line 473) | void ResetCtxForNextPlot(ImPlotContext* ctx) {
    function ResetCtxForNextAlignedPlots (line 495) | void ResetCtxForNextAlignedPlots(ImPlotContext* ctx) {
    function ResetCtxForNextSubplot (line 500) | void ResetCtxForNextSubplot(ImPlotContext* ctx) {
    function ImPlotPlot (line 510) | ImPlotPlot* GetPlot(const char* title) {
    function ImPlotPlot (line 516) | ImPlotPlot* GetCurrentPlot() {
    function BustPlotCache (line 520) | void BustPlotCache() {
    function ImVec2 (line 529) | ImVec2 GetLocationPos(const ImRect& outer_rect, const ImVec2& inner_si...
    function ImVec2 (line 549) | ImVec2 CalcLegendSize(ImPlotItemGroup& items, const ImVec2& pad, const...
    function LegendSortingComp (line 570) | int LegendSortingComp(void* _items, const void* _a, const void* _b) {
    function ShowLegendEntries (line 579) | bool ShowLegendEntries(ImPlotItemGroup& items, const ImRect& legend_bb...
    function AddTicksDefault (line 671) | void AddTicksDefault(const ImPlotRange& range, float pix, bool vertica...
    function AddTicksLogarithmic (line 709) | void AddTicksLogarithmic(const ImPlotRange& range, float pix, bool ver...
    function AddTicksCustom (line 742) | void AddTicksCustom(const double* values, const char* const labels[], ...
    function ImPlotTimeUnit (line 773) | inline ImPlotTimeUnit GetUnitForRange(double range) {
    function LowerBoundStep (line 782) | inline int LowerBoundStep(int max_divs, const int* divs, const int* st...
    function GetTimeStep (line 792) | inline int GetTimeStep(int max_divs, ImPlotTimeUnit unit) {
    function ImPlotTime (line 821) | ImPlotTime MkGmtTime(struct tm *ptm) {
    function tm (line 833) | tm* GetGmtTime(const ImPlotTime& t, tm* ptm)
    function ImPlotTime (line 845) | ImPlotTime MkLocTime(struct tm *ptm) {
    function tm (line 853) | tm* GetLocTime(const ImPlotTime& t, tm* ptm) {
    function ImPlotTime (line 864) | inline ImPlotTime MkTime(struct tm *ptm) {
    function tm (line 871) | inline tm* GetTime(const ImPlotTime& t, tm* ptm) {
    function ImPlotTime (line 878) | ImPlotTime MakeTime(int year, int month, int day, int hour, int min, i...
    function GetYear (line 901) | int GetYear(const ImPlotTime& t) {
    function ImPlotTime (line 907) | ImPlotTime AddTime(const ImPlotTime& t, ImPlotTimeUnit unit, int count) {
    function ImPlotTime (line 939) | ImPlotTime FloorTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 955) | ImPlotTime CeilTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 959) | ImPlotTime RoundTime(const ImPlotTime& t, ImPlotTimeUnit unit) {
    function ImPlotTime (line 967) | ImPlotTime CombineDateTime(const ImPlotTime& date_part, const ImPlotTi...
    function FormatTime (line 987) | int FormatTime(const ImPlotTime& t, char* buffer, int size, ImPlotTime...
    function FormatDate (line 1025) | int FormatDate(const ImPlotTime& t, char* buffer, int size, ImPlotDate...
    function FormatDateTime (line 1054) | int FormatDateTime(const ImPlotTime& t, char* buffer, int size, ImPlot...
    function GetDateTimeWidth (line 1066) | inline float GetDateTimeWidth(ImPlotDateTimeFmt fmt) {
    function LabelTickTime (line 1073) | void LabelTickTime(ImPlotTick& tick, ImGuiTextBuffer& buffer, const Im...
    function TimeLabelSame (line 1083) | inline bool TimeLabelSame(const char* l1, const char* l2) {
    function ImPlotDateTimeFmt (line 1134) | inline ImPlotDateTimeFmt GetDateTimeFmt(const ImPlotDateTimeFmt* ctx, ...
    function AddTicksTime (line 1142) | void AddTicksTime(const ImPlotRange& range, float plot_width, ImPlotTi...
    function DragFloat (line 1243) | bool DragFloat(const char*, F*, float, F, F) {
    function BeginDisabledControls (line 1257) | inline void BeginDisabledControls(bool cond) {
    function EndDisabledControls (line 1264) | inline void EndDisabledControls(bool cond) {
    function ShowAxisContextMenu (line 1271) | void ShowAxisContextMenu(ImPlotAxis& axis, ImPlotAxis* equal_axis, boo...
    function ShowLegendContextMenu (line 1385) | bool ShowLegendContextMenu(ImPlotLegend& legend, bool visible) {
    function ShowSubplotsContextMenu (line 1411) | void ShowSubplotsContextMenu(ImPlotSubplot& subplot) {
    function ShowPlotContextMenu (line 1438) | void ShowPlotContextMenu(ImPlotPlot& plot) {
    function DefaultFormatter (line 1514) | static inline void DefaultFormatter(double value, char* buff, int size...
    function AxisPrecision (line 1519) | static inline int AxisPrecision(const ImPlotAxis& axis) {
    function RoundAxisValue (line 1524) | static inline double RoundAxisValue(const ImPlotAxis& axis, double val...
    function LabelAxisValue (line 1528) | void LabelAxisValue(const ImPlotAxis& axis, double value, char* buff, ...
    function UpdateAxisColors (line 1545) | void UpdateAxisColors(ImPlotAxis& axis) {
    function PadAndDatumAxesX (line 1557) | void PadAndDatumAxesX(ImPlotPlot& plot, float& pad_T, float& pad_B, Im...
    function PadAndDatumAxesY (line 1622) | void PadAndDatumAxesY(ImPlotPlot& plot, float& pad_L, float& pad_R, Im...
    function RenderGridLinesX (line 1708) | static inline void RenderGridLinesX(ImDrawList& DrawList, const ImPlot...
    function RenderGridLinesY (line 1726) | static inline void RenderGridLinesY(ImDrawList& DrawList, const ImPlot...
    function RenderSelectionRect (line 1742) | static inline void RenderSelectionRect(ImDrawList& DrawList, const ImV...
    function UpdateInput (line 1756) | bool UpdateInput(ImPlotPlot& plot) {
    function ApplyNextPlotData (line 2011) | void ApplyNextPlotData(ImAxis idx) {
    function SetupAxis (line 2037) | void SetupAxis(ImAxis idx, const char* label, ImPlotAxisFlags flags) {
    function SetupAxisLimits (line 2061) | void SetupAxisLimits(ImAxis idx, double min_lim, double max_lim, ImPlo...
    function SetupAxisFormat (line 2073) | void SetupAxisFormat(ImAxis idx, const char* fmt) {
    function SetupAxisLinks (line 2084) | void SetupAxisLinks(ImAxis idx, double* min_lnk, double* max_lnk) {
    function SetupAxisFormat (line 2095) | void SetupAxisFormat(ImAxis idx, ImPlotFormatter formatter, void* data) {
    function SetupAxisTicks (line 2105) | void SetupAxisTicks(ImAxis idx, const double* values, int n_ticks, con...
    function SetupAxisTicks (line 2120) | void SetupAxisTicks(ImAxis idx, double v_min, double v_max, int n_tick...
    function SetupAxes (line 2128) | void SetupAxes(const char* x_label, const char* y_label, ImPlotAxisFla...
    function SetupAxesLimits (line 2133) | void SetupAxesLimits(double x_min, double x_max, double y_min, double ...
    function SetupLegend (line 2138) | void SetupLegend(ImPlotLocation location, ImPlotLegendFlags flags) {
    function SetupMouseText (line 2154) | void SetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flag...
    function SetNextAxisLimits (line 2165) | void SetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlot...
    function SetNextAxisLinks (line 2175) | void SetNextAxisLinks(ImAxis axis, double* link_min, double* link_max) {
    function SetNextAxisToFit (line 2182) | void SetNextAxisToFit(ImAxis axis) {
    function SetNextAxesLimits (line 2188) | void SetNextAxesLimits(double x_min, double x_max, double y_min, doubl...
    function SetNextAxesToFit (line 2193) | void SetNextAxesToFit() {
    function BeginPlot (line 2202) | bool BeginPlot(const char* title_id, const ImVec2& size, ImPlotFlags f...
    function SetupFinish (line 2308) | void SetupFinish() {
    function EndPlot (line 2627) | void EndPlot() {
    function SubplotSetCell (line 3093) | void SubplotSetCell(int row, int col) {
    function SubplotSetCell (line 3134) | void SubplotSetCell(int idx) {
    function SubplotNextCell (line 3151) | void SubplotNextCell() {
    function BeginSubplots (line 3157) | bool BeginSubplots(const char* title, int rows, int cols, const ImVec2...
    function EndSubplots (line 3359) | void EndSubplots() {
    function SetAxis (line 3427) | void SetAxis(ImAxis axis) {
    function SetAxes (line 3439) | void SetAxes(ImAxis x_idx, ImAxis y_idx) {
    function ImPlotPoint (line 3451) | ImPlotPoint PixelsToPlot(float x, float y, ImAxis x_idx, ImAxis y_idx) {
    function ImPlotPoint (line 3463) | ImPlotPoint PixelsToPlot(const ImVec2& pix, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3467) | ImVec2 PlotToPixels(double x, double y, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3479) | ImVec2 PlotToPixels(const ImPlotPoint& plt, ImAxis x_idx, ImAxis y_idx) {
    function ImVec2 (line 3483) | ImVec2 GetPlotPos() {
    function ImVec2 (line 3490) | ImVec2 GetPlotSize() {
    function ImPlotPoint (line 3497) | ImPlotPoint GetPlotMousePos(ImAxis x_idx, ImAxis y_idx) {
    function ImPlotRect (line 3503) | ImPlotRect GetPlotLimits(ImAxis x_idx, ImAxis y_idx) {
    function IsPlotHovered (line 3518) | bool IsPlotHovered() {
    function IsAxisHovered (line 3525) | bool IsAxisHovered(ImAxis axis) {
    function IsSubplotsHovered (line 3532) | bool IsSubplotsHovered() {
    function IsPlotSelected (line 3538) | bool IsPlotSelected() {
    function ImPlotRect (line 3545) | ImPlotRect GetPlotSelection(ImAxis x_idx, ImAxis y_idx) {
    function CancelPlotSelection (line 3562) | void CancelPlotSelection() {
    function HideNextItem (line 3571) | void HideNextItem(bool hidden, ImPlotCond cond) {
    function Annotation (line 3582) | void Annotation(double x, double y, const ImVec4& col, const ImVec2& o...
    function AnnotationV (line 3595) | void AnnotationV(double x, double y, const ImVec4& col, const ImVec2& ...
    function Annotation (line 3605) | void Annotation(double x, double y, const ImVec4& col, const ImVec2& o...
    function TagV (line 3612) | void TagV(ImAxis axis, double v, const ImVec4& col, const char* fmt, v...
    function Tag (line 3620) | void Tag(ImAxis axis, double v, const ImVec4& col, const char* fmt, .....
    function Tag (line 3627) | void Tag(ImAxis axis, double v, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3636) | IMPLOT_API void TagX(double x, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3641) | IMPLOT_API void TagX(double x, const ImVec4& color, const char* fmt, ....
    function IMPLOT_API (line 3649) | IMPLOT_API void TagXV(double x, const ImVec4& color, const char* fmt, ...
    function IMPLOT_API (line 3654) | IMPLOT_API void TagY(double y, const ImVec4& color, bool round) {
    function IMPLOT_API (line 3659) | IMPLOT_API void TagY(double y, const ImVec4& color, const char* fmt, ....
    function IMPLOT_API (line 3667) | IMPLOT_API void TagYV(double y, const ImVec4& color, const char* fmt, ...
    function DragPoint (line 3674) | bool DragPoint(int n_id, double* x, double* y, const ImVec4& col, floa...
    function DragLineX (line 3718) | bool DragLineX(int n_id, double* value, const ImVec4& col, float thick...
    function DragLineY (line 3768) | bool DragLineY(int n_id, double* value, const ImVec4& col, float thick...
    function DragRect (line 3819) | bool DragRect(int n_id, double* x_min, double* y_min, double* x_max, d...
    function DragRect (line 3940) | bool DragRect(int id, ImPlotRect* bounds, const ImVec4& col, ImPlotDra...
    function IsLegendEntryHovered (line 3948) | bool IsLegendEntryHovered(const char* label_id) {
    function BeginLegendPopup (line 3957) | bool BeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_but...
    function EndLegendPopup (line 3973) | void EndLegendPopup() {
    function ShowAltLegend (line 3978) | void ShowAltLegend(const char* title_id, bool vertical, const ImVec2 s...
    function BeginDragDropTargetPlot (line 4018) | bool BeginDragDropTargetPlot() {
    function BeginDragDropTargetAxis (line 4024) | bool BeginDragDropTargetAxis(ImAxis axis) {
    function BeginDragDropTargetLegend (line 4033) | bool BeginDragDropTargetLegend() {
    function EndDragDropTarget (line 4040) | void EndDragDropTarget() {
    function BeginDragDropSourcePlot (line 4045) | bool BeginDragDropSourcePlot(ImGuiDragDropFlags flags) {
    function BeginDragDropSourceAxis (line 4053) | bool BeginDragDropSourceAxis(ImAxis idx, ImGuiDragDropFlags flags) {
    function BeginDragDropSourceItem (line 4061) | bool BeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags ...
    function EndDragDropSource (line 4073) | void EndDragDropSource() {
    function BeginAlignedPlots (line 4082) | bool BeginAlignedPlots(const char* group_id, bool vertical) {
    function EndAlignedPlots (line 4103) | void EndAlignedPlots() {
    function ImPlotStyle (line 4117) | ImPlotStyle& GetStyle() {
    function PushStyleColor (line 4123) | void PushStyleColor(ImPlotCol idx, ImU32 col) {
    function PushStyleColor (line 4132) | void PushStyleColor(ImPlotCol idx, const ImVec4& col) {
    function PopStyleColor (line 4141) | void PopStyleColor(int count) {
    function PushStyleVar (line 4153) | void PushStyleVar(ImPlotStyleVar idx, float val) {
    function PushStyleVar (line 4165) | void PushStyleVar(ImPlotStyleVar idx, int val) {
    function PushStyleVar (line 4183) | void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
    function PopStyleVar (line 4197) | void PopStyleVar(int count) {
    function ImPlotColormap (line 4223) | ImPlotColormap AddColormap(const char* name, const ImVec4* colormap, i...
    function ImPlotColormap (line 4234) | ImPlotColormap AddColormap(const char* name, const ImU32*  colormap, i...
    function GetColormapCount (line 4241) | int GetColormapCount() {
    function ImPlotColormap (line 4251) | ImPlotColormap GetColormapIndex(const char* name) {
    function PushColormap (line 4256) | void PushColormap(ImPlotColormap colormap) {
    function PushColormap (line 4263) | void PushColormap(const char* name) {
    function PopColormap (line 4270) | void PopColormap(int count) {
    function ImU32 (line 4281) | ImU32 NextColormapColorU32() {
    function ImVec4 (line 4290) | ImVec4 NextColormapColor() {
    function GetColormapSize (line 4294) | int GetColormapSize(ImPlotColormap cmap) {
    function ImU32 (line 4301) | ImU32 GetColormapColorU32(int idx, ImPlotColormap cmap) {
    function ImVec4 (line 4309) | ImVec4 GetColormapColor(int idx, ImPlotColormap cmap) {
    function ImU32 (line 4313) | ImU32  SampleColormapU32(float t, ImPlotColormap cmap) {
    function ImVec4 (line 4320) | ImVec4 SampleColormap(float t, ImPlotColormap cmap) {
    function RenderColorBar (line 4324) | void RenderColorBar(const ImU32* colors, int size, ImDrawList& DrawLis...
    function ColormapScale (line 4361) | void ColormapScale(const char* label, double scale_min, double scale_m...
    function ColormapSlider (line 4425) | bool ColormapSlider(const char* label, float* t, ImVec4* out, const ch...
    function ColormapButton (line 4459) | bool ColormapButton(const char* label, const ImVec2& size_arg, ImPlotC...
    function ImPlotInputMap (line 4492) | ImPlotInputMap& GetInputMap() {
    function MapInputDefault (line 4498) | void MapInputDefault(ImPlotInputMap* dst) {
    function MapInputReverse (line 4514) | void MapInputReverse(ImPlotInputMap* dst) {
    function ItemIcon (line 4534) | void ItemIcon(const ImVec4& col) {
    function ItemIcon (line 4538) | void ItemIcon(ImU32 col) {
    function ColormapIcon (line 4547) | void ColormapIcon(ImPlotColormap cmap) {
    function ImDrawList (line 4559) | ImDrawList* GetPlotDrawList() {
    function PushPlotClipRect (line 4563) | void PushPlotClipRect(float expand) {
    function PopPlotClipRect (line 4572) | void PopPlotClipRect() {
    function HelpMarker (line 4577) | static void HelpMarker(const char* desc) {
    function ShowStyleSelector (line 4588) | bool ShowStyleSelector(const char* label)
    function ShowColormapSelector (line 4605) | bool ShowColormapSelector(const char* label) {
    function ShowInputMapSelector (line 4622) | bool ShowInputMapSelector(const char* label) {
    function ShowStyleEditor (line 4637) | void ShowStyleEditor(ImPlotStyle* ref) {
    function ShowUserGuide (line 4885) | void ShowUserGuide() {
    function ShowTicksMetrics (line 4911) | void ShowTicksMetrics(const ImPlotTickCollection& ticks) {
    function ShowAxisMetrics (line 4916) | void ShowAxisMetrics(const ImPlotPlot& plot, const ImPlotAxis& axis) {
    function ShowMetricsWindow (line 4943) | void ShowMetricsWindow(bool* p_popen) {
    function ShowDatePicker (line 5143) | bool ShowDatePicker(const char* id, int* level, ImPlotTime* t, const I...
    function ShowTimePicker (line 5354) | bool ShowTimePicker(const char* id, ImPlotTime* t) {
    function StyleColorsAuto (line 5450) | void StyleColorsAuto(ImPlotStyle* dst) {
    function StyleColorsClassic (line 5480) | void StyleColorsClassic(ImPlotStyle* dst) {
    function StyleColorsDark (line 5509) | void StyleColorsDark(ImPlotStyle* dst) {
    function StyleColorsLight (line 5538) | void StyleColorsLight(ImPlotStyle* dst) {
    function BeginPlot (line 5573) | bool BeginPlot(const char* title, const char* x_label, const char* y1_...

FILE: 3rdparty/Cinder-VNM/ui/implot/implot.h
  type ImPlotContext (line 76) | struct ImPlotContext
  type ImAxis (line 79) | typedef int ImAxis;
  type ImPlotFlags (line 80) | typedef int ImPlotFlags;
  type ImPlotAxisFlags (line 81) | typedef int ImPlotAxisFlags;
  type ImPlotSubplotFlags (line 82) | typedef int ImPlotSubplotFlags;
  type ImPlotLegendFlags (line 83) | typedef int ImPlotLegendFlags;
  type ImPlotMouseTextFlags (line 84) | typedef int ImPlotMouseTextFlags;
  type ImPlotDragToolFlags (line 85) | typedef int ImPlotDragToolFlags;
  type ImPlotBarGroupsFlags (line 86) | typedef int ImPlotBarGroupsFlags;
  type ImPlotCond (line 88) | typedef int ImPlotCond;
  type ImPlotCol (line 89) | typedef int ImPlotCol;
  type ImPlotStyleVar (line 90) | typedef int ImPlotStyleVar;
  type ImPlotMarker (line 91) | typedef int ImPlotMarker;
  type ImPlotColormap (line 92) | typedef int ImPlotColormap;
  type ImPlotLocation (line 93) | typedef int ImPlotLocation;
  type ImPlotBin (line 94) | typedef int ImPlotBin;
  type ImAxis_ (line 97) | enum ImAxis_ {
  type ImPlotFlags_ (line 111) | enum ImPlotFlags_ {
  type ImPlotAxisFlags_ (line 128) | enum ImPlotAxisFlags_ {
  type ImPlotSubplotFlags_ (line 151) | enum ImPlotSubplotFlags_ {
  type ImPlotLegendFlags_ (line 167) | enum ImPlotLegendFlags_ {
  type ImPlotMouseTextFlags_ (line 178) | enum ImPlotMouseTextFlags_ {
  type ImPlotDragToolFlags_ (line 186) | enum ImPlotDragToolFlags_ {
  type ImPlotBarGroupsFlags_ (line 195) | enum ImPlotBarGroupsFlags_ {
  type ImPlotCond_ (line 201) | enum ImPlotCond_
  type ImPlotCol_ (line 209) | enum ImPlotCol_ {
  type ImPlotStyleVar_ (line 237) | enum ImPlotStyleVar_ {
  type ImPlotMarker_ (line 271) | enum ImPlotMarker_ {
  type ImPlotColormap_ (line 287) | enum ImPlotColormap_ {
  type ImPlotLocation_ (line 307) | enum ImPlotLocation_ {
  type ImPlotBin_ (line 320) | enum ImPlotBin_ {
  function ImPlotPoint (line 328) | struct ImPlotPoint {
  function const (line 333) | double  operator[] (size_t idx) const { return (&x)[idx]; }
  function ImPlotRange (line 342) | struct ImPlotRange {
  function Contains (line 346) | bool Contains(double value) const     { return value >= Min && value <= ...
  function Clamp (line 348) | double Clamp(double value) const      { return (value < Min) ? Min : (va...
  function ImPlotRect (line 352) | struct ImPlotRect {
  function Contains (line 356) | bool Contains(const ImPlotPoint& p) const                          { ret...
  function Contains (line 357) | bool Contains(double x, double y) const                            { ret...
  function ImPlotPoint (line 359) | ImPlotPoint Clamp(const ImPlotPoint& p)                            { ret...
  function ImPlotPoint (line 360) | ImPlotPoint Clamp(double x, double y)                              { ret...
  type ImPlotStyle (line 366) | struct ImPlotStyle {
  type ImPlotInputMap (line 409) | struct ImPlotInputMap {
  type ImPlotPoint (line 433) | typedef ImPlotPoint (*ImPlotGetter)(void* user_data, int idx);
  function namespace (line 435) | namespace ImPlot {
  type ImPlotFlagsObsolete_ (line 1121) | enum ImPlotFlagsObsolete_ {
  function namespace (line 1126) | namespace ImPlot {

FILE: 3rdparty/Cinder-VNM/ui/implot/implot_demo.cpp
  type MyImPlot (line 43) | namespace MyImPlot {
    type Vector2f (line 46) | struct Vector2f {
      method Vector2f (line 47) | Vector2f(float _x, float _y) { x = _x; y = _y; }
    type WaveData (line 52) | struct WaveData {
      method WaveData (line 54) | WaveData(double x, double amp, double freq, double offset) { X = x; ...
    function ImPlotPoint (line 2118) | ImPlotPoint SineWave(void* data , int idx) {
    function ImPlotPoint (line 2124) | ImPlotPoint SawWave(void* data, int idx) {
    function ImPlotPoint (line 2130) | ImPlotPoint Spiral(void*, int idx) {
    function Sparkline (line 2141) | void Sparkline(const char* id, const float* values, int count, float m...
    function StyleSeaborn (line 2157) | void StyleSeaborn() {
    function BinarySearch (line 2221) | int BinarySearch(const T* arr, int l, int r, T x) {
    function PlotCandlestick (line 2233) | void PlotCandlestick(const char* label_id, const double* xs, const dou...
  type ImPlot (line 71) | namespace ImPlot {
    function T (line 76) | inline T RandomRange(T min, T max) {
    function ImVec4 (line 81) | ImVec4 RandomColor() {
    function RandomGauss (line 90) | double RandomGauss() {
    type NormalDistribution (line 111) | struct NormalDistribution {
      method NormalDistribution (line 112) | NormalDistribution(double mean, double sd) {
    type ScrollingBuffer (line 120) | struct ScrollingBuffer {
      method ScrollingBuffer (line 124) | ScrollingBuffer(int max_size = 2000) {
      method AddPoint (line 129) | void AddPoint(float x, float y) {
      method Erase (line 137) | void Erase() {
    type RollingBuffer (line 146) | struct RollingBuffer {
      method RollingBuffe
Condensed preview — 161 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,373K chars).
[
  {
    "path": ".gitignore",
    "chars": 362,
    "preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic"
  },
  {
    "path": "3rdparty/Cinder-VNM/README.md",
    "chars": 13,
    "preview": "# Cinder-VNM\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/cinderblock.xml",
    "chars": 642,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<cinder>\n<block\n\tname=\"vnm\"\n\tid=\"org.jing.vnm\"\n\tauthor=\"Vinjn Zhang\"\n\tlicense=\"M"
  },
  {
    "path": "3rdparty/Cinder-VNM/imgui_remote_client/imgui/detector.js",
    "chars": 1960,
    "preview": "/**\n * @author alteredq / http://alteredqualia.com/\n * @author mr.doob / http://mrdoob.com/\n */\n\nvar Detector = {\n\n\tcanv"
  },
  {
    "path": "3rdparty/Cinder-VNM/imgui_remote_client/imgui/lz4.js",
    "chars": 255566,
    "preview": "/*! lz4.js v0.1.0 Released under the MIT license. https://github.com/ukyo/lz4.js/LICENSE */\nvar lz4 = {};\n(function() {\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/imgui_remote_client/imgui/main.css",
    "chars": 2239,
    "preview": "body {\n\toverflow\t: hidden;\n\tpadding\t\t: 0;\n\tmargin\t\t: 0;\n\n\tcolor\t\t: #222;\n\tbackground-color: #333;\n}\n.form-style-6{\n    f"
  },
  {
    "path": "3rdparty/Cinder-VNM/imgui_remote_client/imgui.html",
    "chars": 2224,
    "preview": "<!DOCTYPE html>\n<html><head>\n<title>Remote ImGui</title>\n<meta charset=\"UTF-8\">\n<script type=\"text/javascript\" src=\"imgu"
  },
  {
    "path": "3rdparty/Cinder-VNM/imgui_remote_client/imgui.js",
    "chars": 22049,
    "preview": "//-----------------------------------------------------------------------------\n// Remote Imgui for https://github.com/o"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/AnsiToUtf.h",
    "chars": 2171,
    "preview": "#pragma once\r\n\r\n#if defined( CINDER_MSW )\n#include <string>\r\n#include <windows.h>\r\n\r\n// Utf16(unicode) is preferred by W"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/AssetManager.h",
    "chars": 3092,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/Texture.h\"\r\n#include \"cinder/gl/VboMesh.h\"\r\n#include \"cinder/gl/GlslProg.h\"\r\n#includ"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CaptureHelper.h",
    "chars": 2559,
    "preview": "#pragma once\n\n#include \"cinder/app/App.h\"\n#include \"cinder/Capture.h\"\n#include \"cinder/Log.h\"\n#include \"cinder/ip/Flip.h"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CinderGuizmo.h",
    "chars": 523,
    "preview": "#pragma once\r\n\r\n#include <glm/mat4x4.hpp>\r\n\r\nnamespace ImGui\r\n{\r\n    void EnableGizmo(bool enable);\r\n    bool EditGizmo("
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CinderImGui.h",
    "chars": 19854,
    "preview": "/*\n Cinder-ImGui\n This code is intended for use with Cinder\n and Omar Cornut ImGui C++ libraries.\n \n http://libcinder.or"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CinderImGuiExports.h",
    "chars": 1656,
    "preview": "/*\n Cinder-ImGui\n This code is intended for use with Cinder\n and Omar Cornut ImGui C++ libraries.\n \n http://libcinder.or"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CinderRemoteImgui.h",
    "chars": 1022,
    "preview": "#pragma once\r\n\r\n/*\r\nitem.def\r\n    ITEM_DEF(string, REMOTE_GUI_IP, \"127.0.0.1\")\r\n    ITEM_DEF(bool, ENABLE_REMOTE_GUI, fa"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/CubemapRenderer.h",
    "chars": 1856,
    "preview": "#pragma once\r\n\r\n#include <cinder/gl/gl.h>\r\n#include <cinder/app/App.h>\r\n\r\nstruct CubeMapRenderer\r\n{\r\n    ci::gl::FboCube"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/DearLogger.h",
    "chars": 820,
    "preview": "#pragma once\n\n#include \"imgui/imgui.h\"\n#include \"cinder/Log.h\"\n\n// Usage:\n//  static ExampleAppLog my_log;\n//  my_log.Ad"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/FontHelper.h",
    "chars": 686,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/TextureFont.h\"\r\n\r\nstruct FontHelper\r\n{\r\n    static const std::vector<std::string>& g"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/GLHelper.h",
    "chars": 919,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/gl.h\"\r\n#include \"cinder/app/App.h\"\r\n#include \"cinder/ip/Flip.h\"\r\n\r\n#if defined( CIND"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/GlslParamsBuilder.h",
    "chars": 3473,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/GlslProg.h\"\r\n#include \"cinder/params/Params.h\"\r\n\r\n#include <unordered_map>\r\n\r\nstruct"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/GlslParamsBuilderImgui.h",
    "chars": 4184,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/GlslProg.h\"\r\n#include \"MiniConfigImgui.h\"\r\n\r\n#include <unordered_map>\r\n\r\nstruct Glsl"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/LimitSingleInstance.h",
    "chars": 1043,
    "preview": "#pragma once\r\n\r\n#include <windows.h> \r\n\r\n//This code is from Q243953 in case you lose the article and wonder\r\n//where th"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/MiniConfig.h",
    "chars": 1500,
    "preview": "#pragma once\r\n\r\n#include <string>\r\n#include \"cinder/Vector.h\"\r\n#include \"cinder/Quaternion.h\"\r\n#include \"cinder/Color.h\""
  },
  {
    "path": "3rdparty/Cinder-VNM/include/MiniConfigImgui.h",
    "chars": 6978,
    "preview": "#pragma once\r\n\r\n#include \"MiniConfig.h\"\r\n#include \"CinderImGui.h\"\r\n#include <cinder/Utilities.h>\r\n#include <cinder/app/A"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/MotionHelper.h",
    "chars": 697,
    "preview": "#pragma once\n\n#include \"cinder/MotionManager.h\"\n#include \"cinder/app/App.h\"\n#include \"cinder/Log.h\"\n\nusing namespace ci;"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/NvOptimusEnablement.h",
    "chars": 1559,
    "preview": "/*\n Nvidia Enablement\n Copyright (c) 2016, Simon Geilfus, All rights reserved.\n \n Redistribution and use in source and b"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/OscHelper.h",
    "chars": 1539,
    "preview": "#pragma once\r\n\r\n#include \"cinder/osc/Osc.h\"\r\n#include \"cinder/Log.h\"\r\n\r\nstruct OscHelper\r\n{\r\n    static std::unique_ptr<"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/SharedMemory.h",
    "chars": 3875,
    "preview": "#pragma once\n\n#include <string>\n#include <stdio.h>\n#include <sys/stat.h>\n#ifdef _WIN32\n#include <windows.h>\n#include <co"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/StateMachine.h",
    "chars": 2593,
    "preview": "#pragma once\r\n\r\n#include <memory>\r\n#include <string>\r\n\r\n#if 0\r\nstruct AwesomeApp;\r\n\r\nstruct StateIdle : public State<Awe"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/TextureHelper.h",
    "chars": 1208,
    "preview": "#pragma once\r\n\r\n#include \"cinder/gl/Texture.h\"\r\n\r\nusing namespace ci;\r\n\r\ntemplate <typename T>\r\nvoid updateTexture(gl::T"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/TuioHelper.h",
    "chars": 1395,
    "preview": "#pragma once\r\n\r\n#include \"cinder/osc/Osc.h\"\r\n#include \"cinder/Log.h\"\r\n\r\nstruct TuioHelper\r\n{\r\n    static std::unique_ptr"
  },
  {
    "path": "3rdparty/Cinder-VNM/include/renderdoc_app.h",
    "chars": 28925,
    "preview": "/******************************************************************************\n * The MIT License (MIT)\n *\n * Copyright"
  },
  {
    "path": "3rdparty/Cinder-VNM/manually_copy_to_include/item.def",
    "chars": 179,
    "preview": "ITEM_DEF(int, APP_WIDTH, 882)\r\nITEM_DEF(int, APP_HEIGHT, 725)\r\nITEM_DEF(string, NAME, \"vinjn\")\r\nITEM_DEF(float, velocity"
  },
  {
    "path": "3rdparty/Cinder-VNM/src/AssetManager.cpp",
    "chars": 15712,
    "preview": "#include \"../include/AssetManager.h\"\r\n#include \"cinder/app/App.h\"\r\n#include \"cinder/ImageIo.h\"\r\n#include \"cinder/Functio"
  },
  {
    "path": "3rdparty/Cinder-VNM/src/MiniConfig.cpp",
    "chars": 7085,
    "preview": "#include \"../include/MiniConfig.h\"\r\n#include <cinder/Xml.h>\r\n#include <cinder/gl/wrapper.h>\r\n#include <cinder/Utilities."
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/DepthSensor VNM/assets/shader.frag",
    "chars": 296,
    "preview": "uniform sampler2D uTex0;\r\nuniform sampler2D uTex1;\r\nuniform sampler2D uTex2;\r\nuniform sampler2D uTex3;\r\n\r\nin lowp vec4  "
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/DepthSensor VNM/assets/shader.vert",
    "chars": 437,
    "preview": "uniform mat4    ciModelViewProjection;\r\nuniform mat3    ciNormalMatrix;\r\n\r\nin vec4     ciPosition;\r\nin vec2     ciTexCoo"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/DepthSensor VNM/include/item.def",
    "chars": 93,
    "preview": "ITEM_DEF(int, APP_WIDTH, 1024)\r\nITEM_DEF(int, APP_HEIGHT, 768)\r\nITEM_DEF(int, SENSOR_TYPE, 0)"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/DepthSensor VNM/src/_TBOX_PREFIX_App.cpp",
    "chars": 2013,
    "preview": "#include \"cinder/app/App.h\"\n#include \"cinder/app/RendererGl.h\"\n#include \"cinder/gl/gl.h\"\n#include \"cinder/CameraUi.h\"\n#i"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/DepthSensor VNM/template.xml",
    "chars": 400,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<cinder>\n<template name=\"VNM: DepthSensor\" parent=\"org.libcinder.apptemplates.ba"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Melo Scene/include/item.def",
    "chars": 359,
    "preview": "ITEM_DEF(int, APP_WIDTH, 1024)\r\nITEM_DEF(int, APP_HEIGHT, 768)\r\nITEM_DEF(string, MESH_NAME, \"Teapot\")\r\nITEM_DEF(string, "
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Melo Scene/src/_TBOX_PREFIX_App.cpp",
    "chars": 2005,
    "preview": "#include \"cinder/app/App.h\"\n#include \"cinder/app/RendererGl.h\"\n#include \"cinder/gl/gl.h\"\n#include \"cinder/CameraUi.h\"\n#i"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Melo Scene/template.xml",
    "chars": 386,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<cinder>\n<template name=\"VNM: Melo Scene\" parent=\"org.libcinder.apptemplates.bas"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Minimalist VNM/assets/shader.frag",
    "chars": 296,
    "preview": "uniform sampler2D uTex0;\r\nuniform sampler2D uTex1;\r\nuniform sampler2D uTex2;\r\nuniform sampler2D uTex3;\r\n\r\nin lowp vec4  "
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Minimalist VNM/assets/shader.vert",
    "chars": 437,
    "preview": "uniform mat4    ciModelViewProjection;\r\nuniform mat3    ciNormalMatrix;\r\n\r\nin vec4     ciPosition;\r\nin vec2     ciTexCoo"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Minimalist VNM/include/item.def",
    "chars": 359,
    "preview": "ITEM_DEF(int, APP_WIDTH, 1024)\r\nITEM_DEF(int, APP_HEIGHT, 768)\r\nITEM_DEF(string, MESH_NAME, \"Teapot\")\r\nITEM_DEF(string, "
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Minimalist VNM/src/_TBOX_PREFIX_App.cpp",
    "chars": 2154,
    "preview": "#include \"cinder/app/App.h\"\n#include \"cinder/app/RendererGl.h\"\n#include \"cinder/gl/gl.h\"\n#include \"cinder/CameraUi.h\"\n#i"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/Minimalist VNM/template.xml",
    "chars": 354,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<cinder>\n<template name=\"VNM: Minimalist\" parent=\"org.libcinder.apptemplates.bas"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/NonGame/include/item.def",
    "chars": 62,
    "preview": "ITEM_DEF(int, APP_WIDTH, 1024)\r\nITEM_DEF(int, APP_HEIGHT, 768)"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/NonGame/src/_TBOX_PREFIX_App.cpp",
    "chars": 1127,
    "preview": "#include \"cinder/app/App.h\"\n#include \"cinder/app/RendererGl.h\"\n#include \"cinder/gl/gl.h\"\n#include \"cinder/Log.h\"\n\n#inclu"
  },
  {
    "path": "3rdparty/Cinder-VNM/templates/NonGame/template.xml",
    "chars": 351,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<cinder>\n<template name=\"VNM: NonGame\" parent=\"org.libcinder.apptemplates.basico"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/CinderGuizmo.cpp",
    "chars": 4589,
    "preview": "#include \"CinderGuizmo.h\"\r\n#include \"cinder/app/KeyEvent.h\"\r\n#include \"imgui/imgui.h\"\r\n#ifndef IMGUI_DEFINE_MATH_OPERATO"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/CinderImGui.cpp",
    "chars": 71963,
    "preview": "/*\n Cinder-ImGui\n This code is intended for use with Cinder\n and Omar Cornut ImGui C++ libraries.\n \n http://libcinder.or"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/CinderMarkdown.cpp",
    "chars": 2517,
    "preview": "#include <cinder/Utilities.h>\r\n#include \"imgui/ImGui.h\"                // https://github.com/ocornut/imgui\r\n#include \"im"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/CinderRemoteImgui.cpp",
    "chars": 3072,
    "preview": "#include <winsock2.h>\r\n#include \"CinderRemoteImgui.h\"\r\n#include <cinder/app/App.h>\r\n#include <cinder/CinderImGui.h>\r\n#in"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/DearLogger.cpp",
    "chars": 4894,
    "preview": "#include \"DearLogger.h\"\r\n\r\nnamespace ImGui\r\n{\r\n    DearLogger::DearLogger()\r\n    {\r\n        AutoScroll = true;\r\n        "
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsFontAwesome5.h",
    "chars": 38232,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsFontAwesome5Pro.h",
    "chars": 71313,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsFontAwesome5ProBrands.h",
    "chars": 16887,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsFontaudio.h",
    "chars": 6314,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsKenney.h",
    "chars": 8981,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/IconFontCppHeaders/IconsMaterialDesign.h",
    "chars": 37250,
    "preview": "// Generated by https://github.com/juliettef/IconFontCppHeaders script GenerateIconFontCppHeaders.py for language C++11\n"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/.gitignore",
    "chars": 333,
    "preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/CONTRIBUTING",
    "chars": 1381,
    "preview": "# Contributing\nPull requests are welcome, feel free to contribute if you have implemented something which might be usefu"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2017 BalazsJako\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/README.md",
    "chars": 2327,
    "preview": "# ImGuiColorTextEdit\nSyntax highlighting text editor for ImGui\n\n![Screenshot](https://github.com/BalazsJako/ImGuiColorTe"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/TextEditor.cpp",
    "chars": 96482,
    "preview": "#include <algorithm>\n#include <chrono>\n#include <string>\n#include <regex>\n#include <cmath>\n\n#include \"TextEditor.h\"\n\n#de"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuiColorTextEdit/TextEditor.h",
    "chars": 11282,
    "preview": "#pragma once\r\n\r\n#include <string>\r\n#include <vector>\r\n#include <array>\r\n#include <memory>\r\n#include <unordered_set>\r\n#in"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuizmo/ImGuizmo.cpp",
    "chars": 111435,
    "preview": "// https://github.com/CedricGuillemet/ImGuizmo\n// v 1.84 WIP\n//\n// The MIT License(MIT)\n//\n// Copyright(c) 2021 Cedric G"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/ImGuizmo/ImGuizmo.h",
    "chars": 10151,
    "preview": "// https://github.com/CedricGuillemet/ImGuizmo\r\n// v 1.84 WIP\r\n//\r\n// The MIT License(MIT)\r\n//\r\n// Copyright(c) 2021 Ced"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imconfig.h",
    "chars": 9937,
    "preview": "//-----------------------------------------------------------------------------\r\n// COMPILE-TIME OPTIONS FOR DEAR IMGUI\r"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui.cpp",
    "chars": 660608,
    "preview": "// dear imgui, v1.87 WIP\r\n// (main code and documentation)\r\n\r\n// Help:\r\n// - Read FAQ at http://dearimgui.org/faq\r\n// - "
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui.h",
    "chars": 296897,
    "preview": "// dear imgui, v1.87 WIP\r\n// (headers)\r\n\r\n// Help:\r\n// - Read FAQ at http://dearimgui.org/faq\r\n// - Newcomers, read 'Pro"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui_demo.cpp",
    "chars": 412091,
    "preview": "// dear imgui, v1.87 WIP\r\n// (demo code)\r\n\r\n// Help:\r\n// - Read FAQ at http://dearimgui.org/faq\r\n// - Newcomers, read 'P"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui_draw.cpp",
    "chars": 217647,
    "preview": "// dear imgui, v1.87 WIP\r\n// (drawing and font code)\r\n\r\n/*\r\n\r\nIndex of this file:\r\n\r\n// [SECTION] STB libraries implemen"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui_internal.h",
    "chars": 211190,
    "preview": "// dear imgui, v1.87 WIP\r\n// (internal structures/api)\r\n\r\n// You may use this file to debug, understand or extend ImGui "
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui_tables.cpp",
    "chars": 219102,
    "preview": "// dear imgui, v1.87 WIP\r\n// (tables and columns code)\r\n\r\n/*\r\n\r\nIndex of this file:\r\n\r\n// [SECTION] Commentary\r\n// [SECT"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imgui_widgets.cpp",
    "chars": 414065,
    "preview": "// dear imgui, v1.87 WIP\r\n// (widgets code)\r\n\r\n/*\r\n\r\nIndex of this file:\r\n\r\n// [SECTION] Forward Declarations\r\n// [SECTI"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imstb_rectpack.h",
    "chars": 21142,
    "preview": "// [DEAR IMGUI]\r\n// This is a slightly modified version of stb_rect_pack.h 1.00.\r\n// Those changes would need to be push"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imstb_textedit.h",
    "chars": 56455,
    "preview": "// [DEAR IMGUI]\r\n// This is a slightly modified version of stb_textedit.h 1.13.\r\n// Those changes would need to be pushe"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui/imstb_truetype.h",
    "chars": 197260,
    "preview": "// [DEAR IMGUI]\r\n// This is a slightly modified version of stb_truetype.h 1.20.\r\n// Mostly fixing for compiler and stati"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_markdown/License.txt",
    "chars": 870,
    "preview": "Copyright (c) 2019 Juliette Foucaut and Doug Binks\n\nThis software is provided 'as-is', without any express or implied\nwa"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_markdown/README.md",
    "chars": 7773,
    "preview": "Support development of imgui_markdown through our [Patreon](https://www.patreon.com/enkisoftware)\n\n[<img src=\"https://c5"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_markdown/imgui_markdown.h",
    "chars": 26362,
    "preview": "#pragma once\n\n// License: zlib\n// Copyright (c) 2019 Juliette Foucaut & Doug Binks\n// \n// This software is provided 'as-"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/imgui_remote.h",
    "chars": 14367,
    "preview": "//-----------------------------------------------------------------------------\n// Remote ImGui https://github.com/Jordi"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/imgui_remote_webby.h",
    "chars": 4835,
    "preview": "//-----------------------------------------------------------------------------\n// Remote ImGui https://github.com/Jordi"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/LICENSE",
    "chars": 1310,
    "preview": "LZ4 Library\nCopyright (c) 2011-2016, Yann Collet\nAll rights reserved.\n\nRedistribution and use in source and binary forms"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4.c",
    "chars": 49379,
    "preview": "/*\n   LZ4 - Fast LZ compression algorithm\n   Copyright (C) 2011-2015, Yann Collet.\n   BSD 2-Clause License (http://www.o"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4.h",
    "chars": 14890,
    "preview": "/*\n   LZ4 - Fast LZ compression algorithm\n   Header File\n   Copyright (C) 2011-2014, Yann Collet.\n   BSD 2-Clause Licens"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame.c",
    "chars": 52525,
    "preview": "/*\nLZ4 auto-framing library\nCopyright (C) 2011-2014, Yann Collet.\nBSD 2-Clause License (http://www.opensource.org/licens"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame.h",
    "chars": 13377,
    "preview": "/*\n   LZ4 auto-framing library\n   Header File\n   Copyright (C) 2011-2015, Yann Collet.\n   BSD 2-Clause License (http://w"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4frame_static.h",
    "chars": 2776,
    "preview": "/*\n   LZ4 auto-framing library\n   Header File for static linking only\n   Copyright (C) 2011-2015, Yann Collet.\n\n   BSD 2"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4hc.c",
    "chars": 26444,
    "preview": "/*\nLZ4 HC - High Compression Mode of LZ4\nCopyright (C) 2011-2014, Yann Collet.\nBSD 2-Clause License (http://www.opensour"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/lz4hc.h",
    "chars": 8140,
    "preview": "/*\n   LZ4 HC - High Compression Mode of LZ4\n   Header File\n   Copyright (C) 2011-2014, Yann Collet.\n   BSD 2-Clause Lice"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/xxhash.c",
    "chars": 26952,
    "preview": "/*\nxxHash - Fast Hash algorithm\nCopyright (C) 2012-2015, Yann Collet\n\nBSD 2-Clause License (http://www.opensource.org/li"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/lz4/xxhash.h",
    "chars": 5776,
    "preview": "/*\n   xxHash - Extremely Fast Hash algorithm\n   Header File\n   Copyright (C) 2012-2014, Yann Collet.\n   BSD 2-Clause Lic"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/LICENSE",
    "chars": 1334,
    "preview": "Copyright (c) 2012, Andreas Fredriksson <dep at defmacro dot se>\nAll rights reserved.\n\nRedistribution and use in source "
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/README.md",
    "chars": 4232,
    "preview": "\n# Webby - A simple web server for game debugging #\n\nWebby is a web server intended for debugging tools inside a game or"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby.c",
    "chars": 45822,
    "preview": "#define _CRT_SECURE_NO_WARNINGS 1\n#define _WINSOCK_DEPRECATED_NO_WARNINGS 1\n#include \"webby.h\"\n\n/* Copyright (c) 2012, A"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby.h",
    "chars": 6832,
    "preview": "#ifndef WEBBY_H\n#define WEBBY_H\n\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n   Webby - A tiny littl"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby_unix.h",
    "chars": 792,
    "preview": "\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <arpa/inet.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include "
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/imgui_remote/webby/webby_win32.h",
    "chars": 949,
    "preview": "\n#include <winsock2.h>\n\ntypedef SOCKET webby_socket_t;\n\n#if defined(__GNUC__)\n#define WB_ALIGN(x) __attribute__((aligned"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/LICENSE",
    "chars": 1068,
    "preview": "MIT License\n\nCopyright (c) 2020 Evan Pezent\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/README.md",
    "chars": 11290,
    "preview": "# ImPlot\nImPlot is an immediate mode, GPU accelerated plotting library for [Dear ImGui](https://github.com/ocornut/imgui"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/TODO.md",
    "chars": 2567,
    "preview": "The list below represents a combination of high-priority work, nice-to-have features, and random ideas. We make no guara"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/implot.cpp",
    "chars": 256968,
    "preview": "// MIT License\n\n// Copyright (c) 2021 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/implot.h",
    "chars": 72453,
    "preview": "// MIT License\n\n// Copyright (c) 2021 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/implot_demo.cpp",
    "chars": 111057,
    "preview": "// MIT License\n\n// Copyright (c) 2021 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/implot_internal.h",
    "chars": 61995,
    "preview": "// MIT License\n\n// Copyright (c) 2021 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "3rdparty/Cinder-VNM/ui/implot/implot_items.cpp",
    "chars": 140190,
    "preview": "// MIT License\n\n// Copyright (c) 2020 Evan Pezent\n\n// Permission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "LICENSE",
    "chars": 1063,
    "preview": "MIT License\n\nCopyright (c) 2021 TapTap\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
  },
  {
    "path": "README.md",
    "chars": 1622,
    "preview": "# perf-doctor\nA mobile game profiler.\n\n[Download prebuit binary](https://github.com/taptap/perf-doctor/releases)\n\n## GUI"
  },
  {
    "path": "_config.yml",
    "chars": 26,
    "preview": "theme: jekyll-theme-cayman"
  },
  {
    "path": "build.bat",
    "chars": 765,
    "preview": "pyinstaller.exe -p tidevice\\tidevice -F tidevice\\tidevice\\__main__.py -n tidevice.exe --distpath bin\r\n\r\ncd %~dp0\\vc2019\r"
  },
  {
    "path": "deploy.bat",
    "chars": 444,
    "preview": "set mydate=%date:/=%\r\nset TIMESTAMP=%mydate: =_%\r\nset OUTPUT=perf-doctor-%TIMESTAMP%\r\nrmdir /S /Q %OUTPUT%\r\nmkdir %OUTPU"
  },
  {
    "path": "doc/README.md",
    "chars": 11211,
    "preview": "# Simpleperf\n\nSimpleperf is a native CPU profiling tool for Android. It can be used to profile\nboth Android applications"
  },
  {
    "path": "doc/android_application_profiling.md",
    "chars": 11680,
    "preview": "# Android application profiling\n\nThis section shows how to profile an Android application.\nSome examples are [Here](http"
  },
  {
    "path": "doc/android_platform_profiling.md",
    "chars": 3586,
    "preview": "# Android platform profiling\n\n[TOC]\n\n## General Tips\n\nHere are some tips for Android platform developers, who build and "
  },
  {
    "path": "doc/collect_etm_data_for_autofdo.md",
    "chars": 6161,
    "preview": "# Collect ETM data for AutoFDO\n\n[TOC]\n\n## Introduction\n\nETM is a hardware feature available on arm64 devices. It collect"
  },
  {
    "path": "doc/debug_dwarf_unwinding.md",
    "chars": 3665,
    "preview": "# Debug dwarf unwinding\n\nDwarf unwinding is the default way of getting call graphs in simpleperf. In this process,\nsimpl"
  },
  {
    "path": "doc/executable_commands_reference.md",
    "chars": 24815,
    "preview": "# Executable commands reference\n\n[TOC]\n\n## How simpleperf works\n\nModern CPUs have a hardware component called the perfor"
  },
  {
    "path": "doc/inferno.md",
    "chars": 4023,
    "preview": "# Inferno\n\n![logo](./inferno_small.png)\n\n[TOC]\n\n## Description\n\nInferno is a flamegraph generator for native (C/C++) And"
  },
  {
    "path": "doc/jit_symbols.md",
    "chars": 1657,
    "preview": "# JIT symbols\n\n[TOC]\n\n## Java JIT symbols\n\nOn Android >= P, simpleperf supports profiling Java code, no matter whether i"
  },
  {
    "path": "doc/sample_filter.md",
    "chars": 2362,
    "preview": "# Sample Filter\n\nSometimes we want to report samples only for selected processes, threads, libraries, or time\nranges. To"
  },
  {
    "path": "doc/scripts_reference.md",
    "chars": 11829,
    "preview": "# Scripts reference\n\n[TOC]\n\n## Record a profile\n\n### app_profiler.py\n\n`app_profiler.py` is used to record profiling data"
  },
  {
    "path": "include/Resources.h",
    "chars": 139,
    "preview": "#pragma once\n#include \"cinder/CinderResources.h\"\n\n//#define RES_MY_RES\t\t\tCINDER_RESOURCE( ../resources/, image_name.png,"
  },
  {
    "path": "include/item.def",
    "chars": 963,
    "preview": "ITEM_DEF(int, APP_WIDTH, 1920)\nITEM_DEF(int, APP_HEIGHT, 1080)\nITEM_DEF_MINMAX(int, PANEL_HEIGHT, 200, 100, 400)\nITEM_DE"
  },
  {
    "path": "simpleperf/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "simpleperf/annotate.py",
    "chars": 20941,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/api_profiler.py",
    "chars": 6090,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2019 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/app_profiler.py",
    "chars": 21970,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/binary_cache_builder.py",
    "chars": 10866,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/clean_reports.bat",
    "chars": 20,
    "preview": "rm *.html\r\nrm *.data"
  },
  {
    "path": "simpleperf/debug_unwind_reporter.py",
    "chars": 10430,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/gecko_profile_generator.py",
    "chars": 16155,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2021 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/pprof_proto_generator.py",
    "chars": 27111,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/profile_pb2.py",
    "chars": 23780,
    "preview": "# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: profile.proto\n\nimport sys\n_b=sys.version_info[0]<3 "
  },
  {
    "path": "simpleperf/report.py",
    "chars": 11222,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2015 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/report_firefox.bat",
    "chars": 106,
    "preview": "python gecko_profile_generator.py | gzip > firefox_profile.json.gz\r\nstart \"\" https://profiler.firefox.com/"
  },
  {
    "path": "simpleperf/report_gui.bat",
    "chars": 22,
    "preview": "python report.py --gui"
  },
  {
    "path": "simpleperf/report_html.bat",
    "chars": 1651,
    "preview": "python report_html.py --ndk_path %~dp0\\ndk --add_source_code --source_dirs ^\r\nz:\\UE4\\GameProjects\\AtelierClient\\Source\\A"
  },
  {
    "path": "simpleperf/report_html.js",
    "chars": 63707,
    "preview": "/*\n * Copyright (C) 2017 The Android Open Source Project\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "simpleperf/report_html.py",
    "chars": 44268,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/report_sample.py",
    "chars": 4736,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/run.bat",
    "chars": 569,
    "preview": "set mydate=%date:/=%\r\nset DATE=%mydate: =_%\r\nset dt=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%\r\nset TIMESTAMP=%dt: =0%\r\nset PKG"
  },
  {
    "path": "simpleperf/run_simpleperf_on_device.py",
    "chars": 1424,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2017 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/run_simpleperf_without_usb_connection.py",
    "chars": 4477,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2018 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/simpleperf-help-report.txt",
    "chars": 4944,
    "preview": "\r\nd:\\svn_pool\\perf-doctor\\simpleperf>d:\\svn_pool\\perf-doctor\\simpleperf\\\\bin\\windows\\x86_64\\simpleperf.exe help report \r"
  },
  {
    "path": "simpleperf/simpleperf.bat",
    "chars": 42,
    "preview": "%~dp0\\bin\\windows\\x86_64\\simpleperf.exe %*"
  },
  {
    "path": "simpleperf/simpleperf_report_lib.py",
    "chars": 22028,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/simpleperf_utils.py",
    "chars": 45677,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2016 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "simpleperf/stackcollapse.py",
    "chars": 5977,
    "preview": "#!/usr/bin/env python3\n#\n# Copyright (C) 2021 The Android Open Source Project\n#\n# Licensed under the Apache License, Ver"
  },
  {
    "path": "src/LightSpeedApp.cpp",
    "chars": 59765,
    "preview": "#include \"LightSpeedApp.h\"\n#include \"MiniConfig.h\"\n#include \"Cinder/Timeline.h\"\n#include \"cinder/Json.h\"\n#include \"cinde"
  },
  {
    "path": "src/LightSpeedApp.gui.cpp",
    "chars": 21235,
    "preview": "#include \"LightSpeedApp.h\"\n#include \"MiniConfigImgui.h\"\n\n\nstatic ImPlotPoint frameTime_getter(void* data, int idx)\n{\n   "
  },
  {
    "path": "src/LightSpeedApp.h",
    "chars": 7526,
    "preview": "#define _HAS_STD_BYTE 0\n\n#include \"cinder/app/App.h\"\n#include \"cinder/app/RendererGl.h\"\n#include \"cinder/gl/gl.h\"\n#inclu"
  },
  {
    "path": "vc2019/Resources.rc",
    "chars": 82,
    "preview": "#include \"../include/Resources.h\"\r\n\r\n1\tICON\t\"..\\\\resources\\\\cinder_app_icon.ico\"\r\n"
  },
  {
    "path": "vc2019/perf-doctor.sln",
    "chars": 1075,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.3172"
  },
  {
    "path": "vc2019/perf-doctor.vcxproj",
    "chars": 10016,
    "preview": "<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Ite"
  },
  {
    "path": "vc2019/perf-doctor.vcxproj.filters",
    "chars": 7861,
    "preview": "<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <ItemGroup>\r\n    <Filter Inc"
  },
  {
    "path": "vc2019/resource.h",
    "chars": 452,
    "preview": "//{{NO_DEPENDENCIES}}\r\n// Microsoft Visual C++ generated include file.\r\n// Used by Resources.rc\r\n//\r\n#define IDI_ICON1  "
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the taptap/perf-doctor GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 161 files (4.9 MB), approximately 1.3M tokens, and a symbol index with 2930 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!