text:
{
                                            break c
                                        }
                                        b = b + 4 | 0;
                                        e = e + -4 | 0
                                    } while (e >>> 0 > 3)
                                }
                            } while (0);
                            if ((e | 0) == 0) {
                                e = 0
                            } else {
                                while (1) {
                                    if ((a[b >> 0] | 0) == d << 24 >> 24) {
                                        break b
                                    }
                                    b = b + 1 | 0;
                                    e = e + -1 | 0;
                                    if ((e | 0) == 0) {
                                        e = 0;
                                        break
                                    }
                                }
                            }
                        }
                    }
                } while (0);
                i = f;
                return ((e | 0) != 0 ? b : 0) | 0
            }

            function Xa(b, c, d) {
                b = b | 0;
                c = c | 0;
                d = d | 0;
                var e = 0, f = 0, g = 0;
                e = i;
                a:do {
                    if ((d | 0) == 0) {
                        d = 0
                    } else {
                        while (1) {
                            f = a[b >> 0] | 0;
                            g = a[c >> 0] | 0;
                            if (!(f << 24 >> 24 == g << 24 >> 24)) {
                                break
                            }
                            d = d + -1 | 0;
                            if ((d | 0) == 0) {
                                d = 0;
                                break a
                            } else {
                                b = b + 1 | 0;
                                c = c + 1 | 0
                            }
                        }
                        d = (f & 255) - (g & 255) | 0
                    }
                } while (0);
                i = e;
                return d | 0
            }

            function Ya() {
            }

            function Za(a, b, c, d) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                d = d | 0;
                c = a + c >>> 0;
                return (D = b + d + (c >>> 0 < a >>> 0 | 0) >>> 0, c | 0) | 0
            }

            function _a(b, d, e) {
                b = b | 0;
                d = d | 0;
                e = e | 0;
                var f = 0;
                if ((e | 0) >= 4096)return na(b | 0, d | 0, e | 0) | 0;
                f = b | 0;
                if ((b & 3) == (d & 3)) {
                    while (b & 3) {
                        if ((e | 0) == 0)return f | 0;
                        a[b >> 0] = a[d >> 0] | 0;
                        b = b + 1 | 0;
                        d = d + 1 | 0;
                        e = e - 1 | 0
                    }
                    while ((e | 0) >= 4) {
                        c[b >> 2] = c[d >> 2];
                        b = b + 4 | 0;
                        d = d + 4 | 0;
                        e = e - 4 | 0
                    }
                }
                while ((e | 0) > 0) {
                    a[b >> 0] = a[d >> 0] | 0;
                    b = b + 1 | 0;
                    d = d + 1 | 0;
                    e = e - 1 | 0
                }
                return f | 0
            }

            function $a(b, c, d) {
                b = b | 0;
                c = c | 0;
                d = d | 0;
                var e = 0;
                if ((c | 0) < (b | 0) & (b | 0) < (c + d | 0)) {
                    e = b;
                    c = c + d | 0;
                    b = b + d | 0;
                    while ((d | 0) > 0) {
                        b = b - 1 | 0;
                        c = c - 1 | 0;
                        d = d - 1 | 0;
                        a[b >> 0] = a[c >> 0] | 0
                    }
                    b = e
                } else {
                    _a(b, c, d) | 0
                }
                return b | 0
            }

            function ab(b, d, e) {
                b = b | 0;
                d = d | 0;
                e = e | 0;
                var f = 0, g = 0, h = 0, i = 0;
                f = b + e | 0;
                if ((e | 0) >= 20) {
                    d = d & 255;
                    i = b & 3;
                    h = d | d << 8 | d << 16 | d << 24;
                    g = f & ~3;
                    if (i) {
                        i = b + 4 - i | 0;
                        while ((b | 0) < (i | 0)) {
                            a[b >> 0] = d;
                            b = b + 1 | 0
                        }
                    }
                    while ((b | 0) < (g | 0)) {
                        c[b >> 2] = h;
                        b = b + 4 | 0
                    }
                }
                while ((b | 0) < (f | 0)) {
                    a[b >> 0] = d;
                    b = b + 1 | 0
                }
                return b - e | 0
            }

            function bb(a, b, c) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                if ((c | 0) < 32) {
                    D = b << c | (a & (1 << c) - 1 << 32 - c) >>> 32 - c;
                    return a << c
                }
                D = a << c - 32;
                return 0
            }

            function cb(b) {
                b = b | 0;
                var c = 0;
                c = b;
                while (a[c >> 0] | 0) {
                    c = c + 1 | 0
                }
                return c - b | 0
            }

            function db(a, b, c, d) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                d = d | 0;
                b = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0;
                return (D = b, a - c >>> 0 | 0) | 0
            }

            function eb(a, b, c) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                if ((c | 0) < 32) {
                    D = b >>> c;
                    return a >>> c | (b & (1 << c) - 1) << 32 - c
                }
                D = 0;
                return b >>> c - 32 | 0
            }

            function fb(a, b, c) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                if ((c | 0) < 32) {
                    D = b >> c;
                    return a >>> c | (b & (1 << c) - 1) << 32 - c
                }
                D = (b | 0) < 0 ? -1 : 0;
                return b >> c - 32 | 0
            }

            function gb(b) {
                b = b | 0;
                var c = 0;
                c = a[n + (b >>> 24) >> 0] | 0;
                if ((c | 0) < 8)return c | 0;
                c = a[n + (b >> 16 & 255) >> 0] | 0;
                if ((c | 0) < 8)return c + 8 | 0;
                c = a[n + (b >> 8 & 255) >> 0] | 0;
                if ((c | 0) < 8)return c + 16 | 0;
                return (a[n + (b & 255) >> 0] | 0) + 24 | 0
            }

            function hb(b) {
                b = b | 0;
                var c = 0;
                c = a[m + (b & 255) >> 0] | 0;
                if ((c | 0) < 8)return c | 0;
                c = a[m + (b >> 8 & 255) >> 0] | 0;
                if ((c | 0) < 8)return c + 8 | 0;
                c = a[m + (b >> 16 & 255) >> 0] | 0;
                if ((c | 0) < 8)return c + 16 | 0;
                return (a[m + (b >>> 24) >> 0] | 0) + 24 | 0
            }

            function ib(a, b) {
                a = a | 0;
                b = b | 0;
                var c = 0, d = 0, e = 0, f = 0;
                f = a & 65535;
                d = b & 65535;
                c = $(d, f) | 0;
                e = a >>> 16;
                d = (c >>> 16) + ($(d, e) | 0) | 0;
                b = b >>> 16;
                a = $(b, f) | 0;
                return (D = (d >>> 16) + ($(b, e) | 0) + (((d & 65535) + a | 0) >>> 16) | 0, d + a << 16 | c & 65535 | 0) | 0
            }

            function jb(a, b, c, d) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                d = d | 0;
                var e = 0, f = 0, g = 0, h = 0, i = 0, j = 0;
                j = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
                i = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
                f = d >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
                e = ((d | 0) < 0 ? -1 : 0) >> 31 | ((d | 0) < 0 ? -1 : 0) << 1;
                h = db(j ^ a, i ^ b, j, i) | 0;
                g = D;
                b = f ^ j;
                a = e ^ i;
                a = db((ob(h, g, db(f ^ c, e ^ d, f, e) | 0, D, 0) | 0) ^ b, D ^ a, b, a) | 0;
                return a | 0
            }

            function kb(a, b, d, e) {
                a = a | 0;
                b = b | 0;
                d = d | 0;
                e = e | 0;
                var f = 0, g = 0, h = 0, j = 0, k = 0, l = 0;
                f = i;
                i = i + 8 | 0;
                j = f | 0;
                h = b >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
                g = ((b | 0) < 0 ? -1 : 0) >> 31 | ((b | 0) < 0 ? -1 : 0) << 1;
                l = e >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
                k = ((e | 0) < 0 ? -1 : 0) >> 31 | ((e | 0) < 0 ? -1 : 0) << 1;
                b = db(h ^ a, g ^ b, h, g) | 0;
                a = D;
                ob(b, a, db(l ^ d, k ^ e, l, k) | 0, D, j) | 0;
                a = db(c[j >> 2] ^ h, c[j + 4 >> 2] ^ g, h, g) | 0;
                b = D;
                i = f;
                return (D = b, a) | 0
            }

            function lb(a, b, c, d) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                d = d | 0;
                var e = 0, f = 0;
                e = a;
                f = c;
                a = ib(e, f) | 0;
                c = D;
                return (D = ($(b, f) | 0) + ($(d, e) | 0) + c | c & 0, a | 0 | 0) | 0
            }

            function mb(a, b, c, d) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                d = d | 0;
                a = ob(a, b, c, d, 0) | 0;
                return a | 0
            }

            function nb(a, b, d, e) {
                a = a | 0;
                b = b | 0;
                d = d | 0;
                e = e | 0;
                var f = 0, g = 0;
                g = i;
                i = i + 8 | 0;
                f = g | 0;
                ob(a, b, d, e, f) | 0;
                i = g;
                return (D = c[f + 4 >> 2] | 0, c[f >> 2] | 0) | 0
            }

            function ob(a, b, d, e, f) {
                a = a | 0;
                b = b | 0;
                d = d | 0;
                e = e | 0;
                f = f | 0;
                var g = 0, h = 0, i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0;
                h = a;
                j = b;
                i = j;
                l = d;
                g = e;
                k = g;
                if ((i | 0) == 0) {
                    g = (f | 0) != 0;
                    if ((k | 0) == 0) {
                        if (g) {
                            c[f >> 2] = (h >>> 0) % (l >>> 0);
                            c[f + 4 >> 2] = 0
                        }
                        k = 0;
                        m = (h >>> 0) / (l >>> 0) >>> 0;
                        return (D = k, m) | 0
                    } else {
                        if (!g) {
                            l = 0;
                            m = 0;
                            return (D = l, m) | 0
                        }
                        c[f >> 2] = a | 0;
                        c[f + 4 >> 2] = b & 0;
                        l = 0;
                        m = 0;
                        return (D = l, m) | 0
                    }
                }
                m = (k | 0) == 0;
                do {
                    if ((l | 0) != 0) {
                        if (!m) {
                            k = (gb(k | 0) | 0) - (gb(i | 0) | 0) | 0;
                            if (k >>> 0 <= 31) {
                                m = k + 1 | 0;
                                l = 31 - k | 0;
                                a = k - 31 >> 31;
                                j = m;
                                b = h >>> (m >>> 0) & a | i << l;
                                a = i >>> (m >>> 0) & a;
                                k = 0;
                                l = h << l;
                                break
                            }
                            if ((f | 0) == 0) {
                                l = 0;
                                m = 0;
                                return (D = l, m) | 0
                            }
                            c[f >> 2] = a | 0;
                            c[f + 4 >> 2] = j | b & 0;
                            l = 0;
                            m = 0;
                            return (D = l, m) | 0
                        }
                        k = l - 1 | 0;
                        if ((k & l | 0) != 0) {
                            l = (gb(l | 0) | 0) + 33 - (gb(i | 0) | 0) | 0;
                            p = 64 - l | 0;
                            m = 32 - l | 0;
                            n = m >> 31;
                            o = l - 32 | 0;
                            a = o >> 31;
                            j = l;
                            b = m - 1 >> 31 & i >>> (o >>> 0) | (i << m | h >>> (l >>> 0)) & a;
                            a = a & i >>> (l >>> 0);
                            k = h << p & n;
                            l = (i << p | h >>> (o >>> 0)) & n | h << m & l - 33 >> 31;
                            break
                        }
                        if ((f | 0) != 0) {
                            c[f >> 2] = k & h;
                            c[f + 4 >> 2] = 0
                        }
                        if ((l | 0) == 1) {
                            o = j | b & 0;
                            p = a | 0 | 0;
                            return (D = o, p) | 0
                        } else {
                            p = hb(l | 0) | 0;
                            o = i >>> (p >>> 0) | 0;
                            p = i << 32 - p | h >>> (p >>> 0) | 0;
                            return (D = o, p) | 0
                        }
                    } else {
                        if (m) {
                            if ((f | 0) != 0) {
                                c[f >> 2] = (i >>> 0) % (l >>> 0);
                                c[f + 4 >> 2] = 0
                            }
                            o = 0;
                            p = (i >>> 0) / (l >>> 0) >>> 0;
                            return (D = o, p) | 0
                        }
                        if ((h | 0) == 0) {
                            if ((f | 0) != 0) {
                                c[f >> 2] = 0;
                                c[f + 4 >> 2] = (i >>> 0) % (k >>> 0)
                            }
                            o = 0;
                            p = (i >>> 0) / (k >>> 0) >>> 0;
                            return (D = o, p) | 0
                        }
                        l = k - 1 | 0;
                        if ((l & k | 0) == 0) {
                            if ((f | 0) != 0) {
                                c[f >> 2] = a | 0;
                                c[f + 4 >> 2] = l & i | b & 0
                            }
                            o = 0;
                            p = i >>> ((hb(k | 0) | 0) >>> 0);
                            return (D = o, p) | 0
                        }
                        k = (gb(k | 0) | 0) - (gb(i | 0) | 0) | 0;
                        if (k >>> 0 <= 30) {
                            a = k + 1 | 0;
                            l = 31 - k | 0;
                            j = a;
                            b = i << l | h >>> (a >>> 0);
                            a = i >>> (a >>> 0);
                            k = 0;
                            l = h << l;
                            break
                        }
                        if ((f | 0) == 0) {
                            o = 0;
                            p = 0;
                            return (D = o, p) | 0
                        }
                        c[f >> 2] = a | 0;
                        c[f + 4 >> 2] = j | b & 0;
                        o = 0;
                        p = 0;
                        return (D = o, p) | 0
                    }
                } while (0);
                if ((j | 0) == 0) {
                    g = l;
                    e = 0;
                    i = 0
                } else {
                    h = d | 0 | 0;
                    g = g | e & 0;
                    e = Za(h, g, -1, -1) | 0;
                    d = D;
                    i = 0;
                    do {
                        m = l;
                        l = k >>> 31 | l << 1;
                        k = i | k << 1;
                        m = b << 1 | m >>> 31 | 0;
                        n = b >>> 31 | a << 1 | 0;
                        db(e, d, m, n) | 0;
                        p = D;
                        o = p >> 31 | ((p | 0) < 0 ? -1 : 0) << 1;
                        i = o & 1;
                        b = db(m, n, o & h, (((p | 0) < 0 ? -1 : 0) >> 31 | ((p | 0) < 0 ? -1 : 0) << 1) & g) | 0;
                        a = D;
                        j = j - 1 | 0
                    } while ((j | 0) != 0);
                    g = l;
                    e = 0
                }
                h = 0;
                if ((f | 0) != 0) {
                    c[f >> 2] = b;
                    c[f + 4 >> 2] = a
                }
                o = (k | 0) >>> 31 | (g | h) << 1 | (h << 1 | k >>> 31) & 0 | e;
                p = (k << 1 | 0 >>> 31) & -2 | i;
                return (D = o, p) | 0
            }

            function pb(a, b, c) {
                a = a | 0;
                b = b | 0;
                c = c | 0;
                ra[a & 127](b | 0, c | 0)
            }

            function qb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(0, a | 0, b | 0)
            }

            function rb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(1, a | 0, b | 0)
            }

            function sb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(2, a | 0, b | 0)
            }

            function tb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(3, a | 0, b | 0)
            }

            function ub(a, b) {
                a = a | 0;
                b = b | 0;
                fa(4, a | 0, b | 0)
            }

            function vb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(5, a | 0, b | 0)
            }

            function wb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(6, a | 0, b | 0)
            }

            function xb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(7, a | 0, b | 0)
            }

            function yb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(8, a | 0, b | 0)
            }

            function zb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(9, a | 0, b | 0)
            }

            function Ab(a, b) {
                a = a | 0;
                b = b | 0;
                fa(10, a | 0, b | 0)
            }

            function Bb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(11, a | 0, b | 0)
            }

            function Cb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(12, a | 0, b | 0)
            }

            function Db(a, b) {
                a = a | 0;
                b = b | 0;
                fa(13, a | 0, b | 0)
            }

            function Eb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(14, a | 0, b | 0)
            }

            function Fb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(15, a | 0, b | 0)
            }

            function Gb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(16, a | 0, b | 0)
            }

            function Hb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(17, a | 0, b | 0)
            }

            function Ib(a, b) {
                a = a | 0;
                b = b | 0;
                fa(18, a | 0, b | 0)
            }

            function Jb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(19, a | 0, b | 0)
            }

            function Kb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(20, a | 0, b | 0)
            }

            function Lb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(21, a | 0, b | 0)
            }

            function Mb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(22, a | 0, b | 0)
            }

            function Nb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(23, a | 0, b | 0)
            }

            function Ob(a, b) {
                a = a | 0;
                b = b | 0;
                fa(24, a | 0, b | 0)
            }

            function Pb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(25, a | 0, b | 0)
            }

            function Qb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(26, a | 0, b | 0)
            }

            function Rb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(27, a | 0, b | 0)
            }

            function Sb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(28, a | 0, b | 0)
            }

            function Tb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(29, a | 0, b | 0)
            }

            function Ub(a, b) {
                a = a | 0;
                b = b | 0;
                fa(30, a | 0, b | 0)
            }

            function Vb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(31, a | 0, b | 0)
            }

            function Wb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(32, a | 0, b | 0)
            }

            function Xb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(33, a | 0, b | 0)
            }

            function Yb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(34, a | 0, b | 0)
            }

            function Zb(a, b) {
                a = a | 0;
                b = b | 0;
                fa(35, a | 0, b | 0)
            }

            function _b(a, b) {
                a = a | 0;
                b = b | 0;
                fa(36, a | 0, b | 0)
            }

            function $b(a, b) {
                a = a | 0;
                b = b | 0;
                fa(37, a | 0, b | 0)
            }

            function ac(a, b) {
                a = a | 0;
                b = b | 0;
                fa(38, a | 0, b | 0)
            }

            function bc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(39, a | 0, b | 0)
            }

            function cc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(40, a | 0, b | 0)
            }

            function dc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(41, a | 0, b | 0)
            }

            function ec(a, b) {
                a = a | 0;
                b = b | 0;
                fa(42, a | 0, b | 0)
            }

            function fc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(43, a | 0, b | 0)
            }

            function gc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(44, a | 0, b | 0)
            }

            function hc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(45, a | 0, b | 0)
            }

            function ic(a, b) {
                a = a | 0;
                b = b | 0;
                fa(46, a | 0, b | 0)
            }

            function jc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(47, a | 0, b | 0)
            }

            function kc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(48, a | 0, b | 0)
            }

            function lc(a, b) {
                a = a | 0;
                b = b | 0;
                fa(49, a | 0, b | 0)
            }

            function mc(a, b) {
                a = a | 0;
                b = b | 0;
                aa(0)
            }

// EMSCRIPTEN_END_FUNCS
            var ra = [mc, mc, qb, mc, rb, mc, sb, mc, tb, mc, ub, mc, vb, mc, wb, mc, xb, mc, yb, mc, zb, mc, Ab, mc, Bb, mc, Cb, mc, Db, mc, Eb, mc, Fb, mc, Gb, mc, Hb, mc, Ib, mc, Jb, mc, Kb, mc, Lb, mc, Mb, mc, Nb, mc, Ob, mc, Pb, mc, Qb, mc, Rb, mc, Sb, mc, Tb, mc, Ub, mc, Vb, mc, Wb, mc, Xb, mc, Yb, mc, Zb, mc, _b, mc, $b, mc, ac, mc, bc, mc, cc, mc, dc, mc, ec, mc, fc, mc, gc, mc, hc, mc, ic, mc, jc, mc, kc, mc, lc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc, mc];
            return {
                _strlen: cb,
                _free: Ra,
                _AVOggDestroy: Pa,
                _AVOggInit: Na,
                _i64Add: Za,
                _AVOggRead: Oa,
                _realloc: Ta,
                _memset: ab,
                _malloc: Qa,
                _memcpy: _a,
                _memmove: $a,
                _calloc: Sa,
                _bitshift64Shl: bb,
                runPostSets: Ya,
                stackAlloc: sa,
                stackSave: ta,
                stackRestore: ua,
                setThrew: va,
                setTempRet0: ya,
                getTempRet0: za,
                dynCall_vii: pb
            }
// EMSCRIPTEN_END_ASM

        })({
            "Math": Math,
            "Int8Array": Int8Array,
            "Int16Array": Int16Array,
            "Int32Array": Int32Array,
            "Uint8Array": Uint8Array,
            "Uint16Array": Uint16Array,
            "Uint32Array": Uint32Array,
            "Float32Array": Float32Array,
            "Float64Array": Float64Array
        }, {
            "abort": abort,
            "assert": assert,
            "asmPrintInt": asmPrintInt,
            "asmPrintFloat": asmPrintFloat,
            "min": Math_min,
            "jsCall": jsCall,
            "invoke_vii": invoke_vii,
            "_fflush": _fflush,
            "_sysconf": _sysconf,
            "_abort": _abort,
            "___setErrNo": ___setErrNo,
            "_sbrk": _sbrk,
            "_time": _time,
            "_emscripten_memcpy_big": _emscripten_memcpy_big,
            "___assert_fail": ___assert_fail,
            "___errno_location": ___errno_location,
            "STACKTOP": STACKTOP,
            "STACK_MAX": STACK_MAX,
            "tempDoublePtr": tempDoublePtr,
            "ABORT": ABORT,
            "cttz_i8": cttz_i8,
            "ctlz_i8": ctlz_i8,
            "NaN": NaN,
            "Infinity": Infinity
        }, buffer);
        var _strlen = Module["_strlen"] = asm["_strlen"];
        var _free = Module["_free"] = asm["_free"];
        var _AVOggDestroy = Module["_AVOggDestroy"] = asm["_AVOggDestroy"];
        var _AVOggInit = Module["_AVOggInit"] = asm["_AVOggInit"];
        var _i64Add = Module["_i64Add"] = asm["_i64Add"];
        var _AVOggRead = Module["_AVOggRead"] = asm["_AVOggRead"];
        var _realloc = Module["_realloc"] = asm["_realloc"];
        var _memset = Module["_memset"] = asm["_memset"];
        var _malloc = Module["_malloc"] = asm["_malloc"];
        var _memcpy = Module["_memcpy"] = asm["_memcpy"];
        var _memmove = Module["_memmove"] = asm["_memmove"];
        var _calloc = Module["_calloc"] = asm["_calloc"];
        var _bitshift64Shl = Module["_bitshift64Shl"] = asm["_bitshift64Shl"];
        var runPostSets = Module["runPostSets"] = asm["runPostSets"];
        var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"];
        Runtime.stackAlloc = asm["stackAlloc"];
        Runtime.stackSave = asm["stackSave"];
        Runtime.stackRestore = asm["stackRestore"];
        Runtime.setTempRet0 = asm["setTempRet0"];
        Runtime.getTempRet0 = asm["getTempRet0"];
        var i64Math = (function () {
            var goog = {math: {}};
            goog.math.Long = (function (low, high) {
                this.low_ = low | 0;
                this.high_ = high | 0
            });
            goog.math.Long.IntCache_ = {};
            goog.math.Long.fromInt = (function (value) {
                if (-128 <= value && value < 128) {
                    var cachedObj = goog.math.Long.IntCache_[value];
                    if (cachedObj) {
                        return cachedObj
                    }
                }
                var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0);
                if (-128 <= value && value < 128) {
                    goog.math.Long.IntCache_[value] = obj
                }
                return obj
            });
            goog.math.Long.fromNumber = (function (value) {
                if (isNaN(value) || !isFinite(value)) {
                    return goog.math.Long.ZERO
                } else if (value <= -goog.math.Long.TWO_PWR_63_DBL_) {
                    return goog.math.Long.MIN_VALUE
                } else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_) {
                    return goog.math.Long.MAX_VALUE
                } else if (value < 0) {
                    return goog.math.Long.fromNumber(-value).negate()
                } else {
                    return new goog.math.Long(value % goog.math.Long.TWO_PWR_32_DBL_ | 0, value / goog.math.Long.TWO_PWR_32_DBL_ | 0)
                }
            });
            goog.math.Long.fromBits = (function (lowBits, highBits) {
                return new goog.math.Long(lowBits, highBits)
            });
            goog.math.Long.fromString = (function (str, opt_radix) {
                if (str.length == 0) {
                    throw Error("number format error: empty string")
                }
                var radix = opt_radix || 10;
                if (radix < 2 || 36 < radix) {
                    throw Error("radix out of range: " + radix)
                }
                if (str.charAt(0) == "-") {
                    return goog.math.Long.fromString(str.substring(1), radix).negate()
                } else if (str.indexOf("-") >= 0) {
                    throw Error('number format error: interior "-" character: ' + str)
                }
                var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8));
                var result = goog.math.Long.ZERO;
                for (var i = 0; i < str.length; i += 8) {
                    var size = Math.min(8, str.length - i);
                    var value = parseInt(str.substring(i, i + size), radix);
                    if (size < 8) {
                        var power = goog.math.Long.fromNumber(Math.pow(radix, size));
                        result = result.multiply(power).add(goog.math.Long.fromNumber(value))
                    } else {
                        result = result.multiply(radixToPower);
                        result = result.add(goog.math.Long.fromNumber(value))
                    }
                }
                return result
            });
            goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16;
            goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24;
            goog.math.Long.TWO_PWR_32_DBL_ = goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
            goog.math.Long.TWO_PWR_31_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ / 2;
            goog.math.Long.TWO_PWR_48_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_;
            goog.math.Long.TWO_PWR_64_DBL_ = goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_;
            goog.math.Long.TWO_PWR_63_DBL_ = goog.math.Long.TWO_PWR_64_DBL_ / 2;
            goog.math.Long.ZERO = goog.math.Long.fromInt(0);
            goog.math.Long.ONE = goog.math.Long.fromInt(1);
            goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1);
            goog.math.Long.MAX_VALUE = goog.math.Long.fromBits(4294967295 | 0, 2147483647 | 0);
            goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 2147483648 | 0);
            goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24);
            goog.math.Long.prototype.toInt = (function () {
                return this.low_
            });
            goog.math.Long.prototype.toNumber = (function () {
                return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ + this.getLowBitsUnsigned()
            });
            goog.math.Long.prototype.toString = (function (opt_radix) {
                var radix = opt_radix || 10;
                if (radix < 2 || 36 < radix) {
                    throw Error("radix out of range: " + radix)
                }
                if (this.isZero()) {
                    return "0"
                }
                if (this.isNegative()) {
                    if (this.equals(goog.math.Long.MIN_VALUE)) {
                        var radixLong = goog.math.Long.fromNumber(radix);
                        var div = this.div(radixLong);
                        var rem = div.multiply(radixLong).subtract(this);
                        return div.toString(radix) + rem.toInt().toString(radix)
                    } else {
                        return "-" + this.negate().toString(radix)
                    }
                }
                var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6));
                var rem = this;
                var result = "";
                while (true) {
                    var remDiv = rem.div(radixToPower);
                    var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt();
                    var digits = intval.toString(radix);
                    rem = remDiv;
                    if (rem.isZero()) {
                        return digits + result
                    } else {
                        while (digits.length < 6) {
                            digits = "0" + digits
                        }
                        result = "" + digits + result
                    }
                }
            });
            goog.math.Long.prototype.getHighBits = (function () {
                return this.high_
            });
            goog.math.Long.prototype.getLowBits = (function () {
                return this.low_
            });
            goog.math.Long.prototype.getLowBitsUnsigned = (function () {
                return this.low_ >= 0 ? this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_
            });
            goog.math.Long.prototype.getNumBitsAbs = (function () {
                if (this.isNegative()) {
                    if (this.equals(goog.math.Long.MIN_VALUE)) {
                        return 64
                    } else {
                        return this.negate().getNumBitsAbs()
                    }
                } else {
                    var val = this.high_ != 0 ? this.high_ : this.low_;
                    for (var bit = 31; bit > 0; bit--) {
                        if ((val & 1 << bit) != 0) {
                            break
                        }
                    }
                    return this.high_ != 0 ? bit + 33 : bit + 1
                }
            });
            goog.math.Long.prototype.isZero = (function () {
                return this.high_ == 0 && this.low_ == 0
            });
            goog.math.Long.prototype.isNegative = (function () {
                return this.high_ < 0
            });
            goog.math.Long.prototype.isOdd = (function () {
                return (this.low_ & 1) == 1
            });
            goog.math.Long.prototype.equals = (function (other) {
                return this.high_ == other.high_ && this.low_ == other.low_
            });
            goog.math.Long.prototype.notEquals = (function (other) {
                return this.high_ != other.high_ || this.low_ != other.low_
            });
            goog.math.Long.prototype.lessThan = (function (other) {
                return this.compare(other) < 0
            });
            goog.math.Long.prototype.lessThanOrEqual = (function (other) {
                return this.compare(other) <= 0
            });
            goog.math.Long.prototype.greaterThan = (function (other) {
                return this.compare(other) > 0
            });
            goog.math.Long.prototype.greaterThanOrEqual = (function (other) {
                return this.compare(other) >= 0
            });
            goog.math.Long.prototype.compare = (function (other) {
                if (this.equals(other)) {
                    return 0
                }
                var thisNeg = this.isNegative();
                var otherNeg = other.isNegative();
                if (thisNeg && !otherNeg) {
                    return -1
                }
                if (!thisNeg && otherNeg) {
                    return 1
                }
                if (this.subtract(other).isNegative()) {
                    return -1
                } else {
                    return 1
                }
            });
            goog.math.Long.prototype.negate = (function () {
                if (this.equals(goog.math.Long.MIN_VALUE)) {
                    return goog.math.Long.MIN_VALUE
                } else {
                    return this.not().add(goog.math.Long.ONE)
                }
            });
            goog.math.Long.prototype.add = (function (other) {
                var a48 = this.high_ >>> 16;
                var a32 = this.high_ & 65535;
                var a16 = this.low_ >>> 16;
                var a00 = this.low_ & 65535;
                var b48 = other.high_ >>> 16;
                var b32 = other.high_ & 65535;
                var b16 = other.low_ >>> 16;
                var b00 = other.low_ & 65535;
                var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
                c00 += a00 + b00;
                c16 += c00 >>> 16;
                c00 &= 65535;
                c16 += a16 + b16;
                c32 += c16 >>> 16;
                c16 &= 65535;
                c32 += a32 + b32;
                c48 += c32 >>> 16;
                c32 &= 65535;
                c48 += a48 + b48;
                c48 &= 65535;
                return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
            });
            goog.math.Long.prototype.subtract = (function (other) {
                return this.add(other.negate())
            });
            goog.math.Long.prototype.multiply = (function (other) {
                if (this.isZero()) {
                    return goog.math.Long.ZERO
                } else if (other.isZero()) {
                    return goog.math.Long.ZERO
                }
                if (this.equals(goog.math.Long.MIN_VALUE)) {
                    return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO
                } else if (other.equals(goog.math.Long.MIN_VALUE)) {
                    return this.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO
                }
                if (this.isNegative()) {
                    if (other.isNegative()) {
                        return this.negate().multiply(other.negate())
                    } else {
                        return this.negate().multiply(other).negate()
                    }
                } else if (other.isNegative()) {
                    return this.multiply(other.negate()).negate()
                }
                if (this.lessThan(goog.math.Long.TWO_PWR_24_) && other.lessThan(goog.math.Long.TWO_PWR_24_)) {
                    return goog.math.Long.fromNumber(this.toNumber() * other.toNumber())
                }
                var a48 = this.high_ >>> 16;
                var a32 = this.high_ & 65535;
                var a16 = this.low_ >>> 16;
                var a00 = this.low_ & 65535;
                var b48 = other.high_ >>> 16;
                var b32 = other.high_ & 65535;
                var b16 = other.low_ >>> 16;
                var b00 = other.low_ & 65535;
                var c48 = 0, c32 = 0, c16 = 0, c00 = 0;
                c00 += a00 * b00;
                c16 += c00 >>> 16;
                c00 &= 65535;
                c16 += a16 * b00;
                c32 += c16 >>> 16;
                c16 &= 65535;
                c16 += a00 * b16;
                c32 += c16 >>> 16;
                c16 &= 65535;
                c32 += a32 * b00;
                c48 += c32 >>> 16;
                c32 &= 65535;
                c32 += a16 * b16;
                c48 += c32 >>> 16;
                c32 &= 65535;
                c32 += a00 * b32;
                c48 += c32 >>> 16;
                c32 &= 65535;
                c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;
                c48 &= 65535;
                return goog.math.Long.fromBits(c16 << 16 | c00, c48 << 16 | c32)
            });
            goog.math.Long.prototype.div = (function (other) {
                if (other.isZero()) {
                    throw Error("division by zero")
                } else if (this.isZero()) {
                    return goog.math.Long.ZERO
                }
                if (this.equals(goog.math.Long.MIN_VALUE)) {
                    if (other.equals(goog.math.Long.ONE) || other.equals(goog.math.Long.NEG_ONE)) {
                        return goog.math.Long.MIN_VALUE
                    } else if (other.equals(goog.math.Long.MIN_VALUE)) {
                        return goog.math.Long.ONE
                    } else {
                        var halfThis = this.shiftRight(1);
                        var approx = halfThis.div(other).shiftLeft(1);
                        if (approx.equals(goog.math.Long.ZERO)) {
                            return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE
                        } else {
                            var rem = this.subtract(other.multiply(approx));
                            var result = approx.add(rem.div(other));
                            return result
                        }
                    }
                } else if (other.equals(goog.math.Long.MIN_VALUE)) {
                    return goog.math.Long.ZERO
                }
                if (this.isNegative()) {
                    if (other.isNegative()) {
                        return this.negate().div(other.negate())
                    } else {
                        return this.negate().div(other).negate()
                    }
                } else if (other.isNegative()) {
                    return this.div(other.negate()).negate()
                }
                var res = goog.math.Long.ZERO;
                var rem = this;
                while (rem.greaterThanOrEqual(other)) {
                    var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber()));
                    var log2 = Math.ceil(Math.log(approx) / Math.LN2);
                    var delta = log2 <= 48 ? 1 : Math.pow(2, log2 - 48);
                    var approxRes = goog.math.Long.fromNumber(approx);
                    var approxRem = approxRes.multiply(other);
                    while (approxRem.isNegative() || approxRem.greaterThan(rem)) {
                        approx -= delta;
                        approxRes = goog.math.Long.fromNumber(approx);
                        approxRem = approxRes.multiply(other)
                    }
                    if (approxRes.isZero()) {
                        approxRes = goog.math.Long.ONE
                    }
                    res = res.add(approxRes);
                    rem = rem.subtract(approxRem)
                }
                return res
            });
            goog.math.Long.prototype.modulo = (function (other) {
                return this.subtract(this.div(other).multiply(other))
            });
            goog.math.Long.prototype.not = (function () {
                return goog.math.Long.fromBits(~this.low_, ~this.high_)
            });
            goog.math.Long.prototype.and = (function (other) {
                return goog.math.Long.fromBits(this.low_ & other.low_, this.high_ & other.high_)
            });
            goog.math.Long.prototype.or = (function (other) {
                return goog.math.Long.fromBits(this.low_ | other.low_, this.high_ | other.high_)
            });
            goog.math.Long.prototype.xor = (function (other) {
                return goog.math.Long.fromBits(this.low_ ^ other.low_, this.high_ ^ other.high_)
            });
            goog.math.Long.prototype.shiftLeft = (function (numBits) {
                numBits &= 63;
                if (numBits == 0) {
                    return this
                } else {
                    var low = this.low_;
                    if (numBits < 32) {
                        var high = this.high_;
                        return goog.math.Long.fromBits(low << numBits, high << numBits | low >>> 32 - numBits)
                    } else {
                        return goog.math.Long.fromBits(0, low << numBits - 32)
                    }
                }
            });
            goog.math.Long.prototype.shiftRight = (function (numBits) {
                numBits &= 63;
                if (numBits == 0) {
                    return this
                } else {
                    var high = this.high_;
                    if (numBits < 32) {
                        var low = this.low_;
                        return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >> numBits)
                    } else {
                        return goog.math.Long.fromBits(high >> numBits - 32, high >= 0 ? 0 : -1)
                    }
                }
            });
            goog.math.Long.prototype.shiftRightUnsigned = (function (numBits) {
                numBits &= 63;
                if (numBits == 0) {
                    return this
                } else {
                    var high = this.high_;
                    if (numBits < 32) {
                        var low = this.low_;
                        return goog.math.Long.fromBits(low >>> numBits | high << 32 - numBits, high >>> numBits)
                    } else if (numBits == 32) {
                        return goog.math.Long.fromBits(high, 0)
                    } else {
                        return goog.math.Long.fromBits(high >>> numBits - 32, 0)
                    }
                }
            });
            var navigator = {appName: "Modern Browser"};
            var dbits;
            var canary = 0xdeadbeefcafe;
            var j_lm = (canary & 16777215) == 15715070;

            function BigInteger(a, b, c) {
                if (a != null)if ("number" == typeof a)this.fromNumber(a, b, c); else if (b == null && "string" != typeof a)this.fromString(a, 256); else this.fromString(a, b)
            }

            function nbi() {
                return new BigInteger(null)
            }

            function am1(i, x, w, j, c, n) {
                while (--n >= 0) {
                    var v = x * this[i++] + w[j] + c;
                    c = Math.floor(v / 67108864);
                    w[j++] = v & 67108863
                }
                return c
            }

            function am2(i, x, w, j, c, n) {
                var xl = x & 32767, xh = x >> 15;
                while (--n >= 0) {
                    var l = this[i] & 32767;
                    var h = this[i++] >> 15;
                    var m = xh * l + h * xl;
                    l = xl * l + ((m & 32767) << 15) + w[j] + (c & 1073741823);
                    c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
                    w[j++] = l & 1073741823
                }
                return c
            }

            function am3(i, x, w, j, c, n) {
                var xl = x & 16383, xh = x >> 14;
                while (--n >= 0) {
                    var l = this[i] & 16383;
                    var h = this[i++] >> 14;
                    var m = xh * l + h * xl;
                    l = xl * l + ((m & 16383) << 14) + w[j] + c;
                    c = (l >> 28) + (m >> 14) + xh * h;
                    w[j++] = l & 268435455
                }
                return c
            }

            if (j_lm && navigator.appName == "Microsoft Internet Explorer") {
                BigInteger.prototype.am = am2;
                dbits = 30
            } else if (j_lm && navigator.appName != "Netscape") {
                BigInteger.prototype.am = am1;
                dbits = 26
            } else {
                BigInteger.prototype.am = am3;
                dbits = 28
            }
            BigInteger.prototype.DB = dbits;
            BigInteger.prototype.DM = (1 << dbits) - 1;
            BigInteger.prototype.DV = 1 << dbits;
            var BI_FP = 52;
            BigInteger.prototype.FV = Math.pow(2, BI_FP);
            BigInteger.prototype.F1 = BI_FP - dbits;
            BigInteger.prototype.F2 = 2 * dbits - BI_FP;
            var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
            var BI_RC = new Array;
            var rr, vv;
            rr = "0".charCodeAt(0);
            for (vv = 0; vv <= 9; ++vv)BI_RC[rr++] = vv;
            rr = "a".charCodeAt(0);
            for (vv = 10; vv < 36; ++vv)BI_RC[rr++] = vv;
            rr = "A".charCodeAt(0);
            for (vv = 10; vv < 36; ++vv)BI_RC[rr++] = vv;
            function int2char(n) {
                return BI_RM.charAt(n)
            }

            function intAt(s, i) {
                var c = BI_RC[s.charCodeAt(i)];
                return c == null ? -1 : c
            }

            function bnpCopyTo(r) {
                for (var i = this.t - 1; i >= 0; --i)r[i] = this[i];
                r.t = this.t;
                r.s = this.s
            }

            function bnpFromInt(x) {
                this.t = 1;
                this.s = x < 0 ? -1 : 0;
                if (x > 0)this[0] = x; else if (x < -1)this[0] = x + DV; else this.t = 0
            }

            function nbv(i) {
                var r = nbi();
                r.fromInt(i);
                return r
            }

            function bnpFromString(s, b) {
                var k;
                if (b == 16)k = 4; else if (b == 8)k = 3; else if (b == 256)k = 8; else if (b == 2)k = 1; else if (b == 32)k = 5; else if (b == 4)k = 2; else {
                    this.fromRadix(s, b);
                    return
                }
                this.t = 0;
                this.s = 0;
                var i = s.length, mi = false, sh = 0;
                while (--i >= 0) {
                    var x = k == 8 ? s[i] & 255 : intAt(s, i);
                    if (x < 0) {
                        if (s.charAt(i) == "-")mi = true;
                        continue
                    }
                    mi = false;
                    if (sh == 0)this[this.t++] = x; else if (sh + k > this.DB) {
                        this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;
                        this[this.t++] = x >> this.DB - sh
                    } else this[this.t - 1] |= x << sh;
                    sh += k;
                    if (sh >= this.DB)sh -= this.DB
                }
                if (k == 8 && (s[0] & 128) != 0) {
                    this.s = -1;
                    if (sh > 0)this[this.t - 1] |= (1 << this.DB - sh) - 1 << sh
                }
                this.clamp();
                if (mi)BigInteger.ZERO.subTo(this, this)
            }

            function bnpClamp() {
                var c = this.s & this.DM;
                while (this.t > 0 && this[this.t - 1] == c)--this.t
            }

            function bnToString(b) {
                if (this.s < 0)return "-" + this.negate().toString(b);
                var k;
                if (b == 16)k = 4; else if (b == 8)k = 3; else if (b == 2)k = 1; else if (b == 32)k = 5; else if (b == 4)k = 2; else return this.toRadix(b);
                var km = (1 << k) - 1, d, m = false, r = "", i = this.t;
                var p = this.DB - i * this.DB % k;
                if (i-- > 0) {
                    if (p < this.DB && (d = this[i] >> p) > 0) {
                        m = true;
                        r = int2char(d)
                    }
                    while (i >= 0) {
                        if (p < k) {
                            d = (this[i] & (1 << p) - 1) << k - p;
                            d |= this[--i] >> (p += this.DB - k)
                        } else {
                            d = this[i] >> (p -= k) & km;
                            if (p <= 0) {
                                p += this.DB;
                                --i
                            }
                        }
                        if (d > 0)m = true;
                        if (m)r += int2char(d)
                    }
                }
                return m ? r : "0"
            }

            function bnNegate() {
                var r = nbi();
                BigInteger.ZERO.subTo(this, r);
                return r
            }

            function bnAbs() {
                return this.s < 0 ? this.negate() : this
            }

            function bnCompareTo(a) {
                var r = this.s - a.s;
                if (r != 0)return r;
                var i = this.t;
                r = i - a.t;
                if (r != 0)return this.s < 0 ? -r : r;
                while (--i >= 0)if ((r = this[i] - a[i]) != 0)return r;
                return 0
            }

            function nbits(x) {
                var r = 1, t;
                if ((t = x >>> 16) != 0) {
                    x = t;
                    r += 16
                }
                if ((t = x >> 8) != 0) {
                    x = t;
                    r += 8
                }
                if ((t = x >> 4) != 0) {
                    x = t;
                    r += 4
                }
                if ((t = x >> 2) != 0) {
                    x = t;
                    r += 2
                }
                if ((t = x >> 1) != 0) {
                    x = t;
                    r += 1
                }
                return r
            }

            function bnBitLength() {
                if (this.t <= 0)return 0;
                return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM)
            }

            function bnpDLShiftTo(n, r) {
                var i;
                for (i = this.t - 1; i >= 0; --i)r[i + n] = this[i];
                for (i = n - 1; i >= 0; --i)r[i] = 0;
                r.t = this.t + n;
                r.s = this.s
            }

            function bnpDRShiftTo(n, r) {
                for (var i = n; i < this.t; ++i)r[i - n] = this[i];
                r.t = Math.max(this.t - n, 0);
                r.s = this.s
            }

            function bnpLShiftTo(n, r) {
                var bs = n % this.DB;
                var cbs = this.DB - bs;
                var bm = (1 << cbs) - 1;
                var ds = Math.floor(n / this.DB), c = this.s << bs & this.DM, i;
                for (i = this.t - 1; i >= 0; --i) {
                    r[i + ds + 1] = this[i] >> cbs | c;
                    c = (this[i] & bm) << bs
                }
                for (i = ds - 1; i >= 0; --i)r[i] = 0;
                r[ds] = c;
                r.t = this.t + ds + 1;
                r.s = this.s;
                r.clamp()
            }

            function bnpRShiftTo(n, r) {
                r.s = this.s;
                var ds = Math.floor(n / this.DB);
                if (ds >= this.t) {
                    r.t = 0;
                    return
                }
                var bs = n % this.DB;
                var cbs = this.DB - bs;
                var bm = (1 << bs) - 1;
                r[0] = this[ds] >> bs;
                for (var i = ds + 1; i < this.t; ++i) {
                    r[i - ds - 1] |= (this[i] & bm) << cbs;
                    r[i - ds] = this[i] >> bs
                }
                if (bs > 0)r[this.t - ds - 1] |= (this.s & bm) << cbs;
                r.t = this.t - ds;
                r.clamp()
            }

            function bnpSubTo(a, r) {
                var i = 0, c = 0, m = Math.min(a.t, this.t);
                while (i < m) {
                    c += this[i] - a[i];
                    r[i++] = c & this.DM;
                    c >>= this.DB
                }
                if (a.t < this.t) {
                    c -= a.s;
                    while (i < this.t) {
                        c += this[i];
                        r[i++] = c & this.DM;
                        c >>= this.DB
                    }
                    c += this.s
                } else {
                    c += this.s;
                    while (i < a.t) {
                        c -= a[i];
                        r[i++] = c & this.DM;
                        c >>= this.DB
                    }
                    c -= a.s
                }
                r.s = c < 0 ? -1 : 0;
                if (c < -1)r[i++] = this.DV + c; else if (c > 0)r[i++] = c;
                r.t = i;
                r.clamp()
            }

            function bnpMultiplyTo(a, r) {
                var x = this.abs(), y = a.abs();
                var i = x.t;
                r.t = i + y.t;
                while (--i >= 0)r[i] = 0;
                for (i = 0; i < y.t; ++i)r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
                r.s = 0;
                r.clamp();
                if (this.s != a.s)BigInteger.ZERO.subTo(r, r)
            }

            function bnpSquareTo(r) {
                var x = this.abs();
                var i = r.t = 2 * x.t;
                while (--i >= 0)r[i] = 0;
                for (i = 0; i < x.t - 1; ++i) {
                    var c = x.am(i, x[i], r, 2 * i, 0, 1);
                    if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
                        r[i + x.t] -= x.DV;
                        r[i + x.t + 1] = 1
                    }
                }
                if (r.t > 0)r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
                r.s = 0;
                r.clamp()
            }

            function bnpDivRemTo(m, q, r) {
                var pm = m.abs();
                if (pm.t <= 0)return;
                var pt = this.abs();
                if (pt.t < pm.t) {
                    if (q != null)q.fromInt(0);
                    if (r != null)this.copyTo(r);
                    return
                }
                if (r == null)r = nbi();
                var y = nbi(), ts = this.s, ms = m.s;
                var nsh = this.DB - nbits(pm[pm.t - 1]);
                if (nsh > 0) {
                    pm.lShiftTo(nsh, y);
                    pt.lShiftTo(nsh, r)
                } else {
                    pm.copyTo(y);
                    pt.copyTo(r)
                }
                var ys = y.t;
                var y0 = y[ys - 1];
                if (y0 == 0)return;
                var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);
                var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2;
                var i = r.t, j = i - ys, t = q == null ? nbi() : q;
                y.dlShiftTo(j, t);
                if (r.compareTo(t) >= 0) {
                    r[r.t++] = 1;
                    r.subTo(t, r)
                }
                BigInteger.ONE.dlShiftTo(ys, t);
                t.subTo(y, y);
                while (y.t < ys)y[y.t++] = 0;
                while (--j >= 0) {
                    var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
                    if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {
                        y.dlShiftTo(j, t);
                        r.subTo(t, r);
                        while (r[i] < --qd)r.subTo(t, r)
                    }
                }
                if (q != null) {
                    r.drShiftTo(ys, q);
                    if (ts != ms)BigInteger.ZERO.subTo(q, q)
                }
                r.t = ys;
                r.clamp();
                if (nsh > 0)r.rShiftTo(nsh, r);
                if (ts < 0)BigInteger.ZERO.subTo(r, r)
            }

            function bnMod(a) {
                var r = nbi();
                this.abs().divRemTo(a, null, r);
                if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0)a.subTo(r, r);
                return r
            }

            function Classic(m) {
                this.m = m
            }

            function cConvert(x) {
                if (x.s < 0 || x.compareTo(this.m) >= 0)return x.mod(this.m); else return x
            }

            function cRevert(x) {
                return x
            }

            function cReduce(x) {
                x.divRemTo(this.m, null, x)
            }

            function cMulTo(x, y, r) {
                x.multiplyTo(y, r);
                this.reduce(r)
            }

            function cSqrTo(x, r) {
                x.squareTo(r);
                this.reduce(r)
            }

            Classic.prototype.convert = cConvert;
            Classic.prototype.revert = cRevert;
            Classic.prototype.reduce = cReduce;
            Classic.prototype.mulTo = cMulTo;
            Classic.prototype.sqrTo = cSqrTo;
            function bnpInvDigit() {
                if (this.t < 1)return 0;
                var x = this[0];
                if ((x & 1) == 0)return 0;
                var y = x & 3;
                y = y * (2 - (x & 15) * y) & 15;
                y = y * (2 - (x & 255) * y) & 255;
                y = y * (2 - ((x & 65535) * y & 65535)) & 65535;
                y = y * (2 - x * y % this.DV) % this.DV;
                return y > 0 ? this.DV - y : -y
            }

            function Montgomery(m) {
                this.m = m;
                this.mp = m.invDigit();
                this.mpl = this.mp & 32767;
                this.mph = this.mp >> 15;
                this.um = (1 << m.DB - 15) - 1;
                this.mt2 = 2 * m.t
            }

            function montConvert(x) {
                var r = nbi();
                x.abs().dlShiftTo(this.m.t, r);
                r.divRemTo(this.m, null, r);
                if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0)this.m.subTo(r, r);
                return r
            }

            function montRevert(x) {
                var r = nbi();
                x.copyTo(r);
                this.reduce(r);
                return r
            }

            function montReduce(x) {
                while (x.t <= this.mt2)x[x.t++] = 0;
                for (var i = 0; i < this.m.t; ++i) {
                    var j = x[i] & 32767;
                    var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM;
                    j = i + this.m.t;
                    x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
                    while (x[j] >= x.DV) {
                        x[j] -= x.DV;
                        x[++j]++
                    }
                }
                x.clamp();
                x.drShiftTo(this.m.t, x);
                if (x.compareTo(this.m) >= 0)x.subTo(this.m, x)
            }

            function montSqrTo(x, r) {
                x.squareTo(r);
                this.reduce(r)
            }

            function montMulTo(x, y, r) {
                x.multiplyTo(y, r);
                this.reduce(r)
            }

            Montgomery.prototype.convert = montConvert;
            Montgomery.prototype.revert = montRevert;
            Montgomery.prototype.reduce = montReduce;
            Montgomery.prototype.mulTo = montMulTo;
            Montgomery.prototype.sqrTo = montSqrTo;
            function bnpIsEven() {
                return (this.t > 0 ? this[0] & 1 : this.s) == 0
            }

            function bnpExp(e, z) {
                if (e > 4294967295 || e < 1)return BigInteger.ONE;
                var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1;
                g.copyTo(r);
                while (--i >= 0) {
                    z.sqrTo(r, r2);
                    if ((e & 1 << i) > 0)z.mulTo(r2, g, r); else {
                        var t = r;
                        r = r2;
                        r2 = t
                    }
                }
                return z.revert(r)
            }

            function bnModPowInt(e, m) {
                var z;
                if (e < 256 || m.isEven())z = new Classic(m); else z = new Montgomery(m);
                return this.exp(e, z)
            }

            BigInteger.prototype.copyTo = bnpCopyTo;
            BigInteger.prototype.fromInt = bnpFromInt;
            BigInteger.prototype.fromString = bnpFromString;
            BigInteger.prototype.clamp = bnpClamp;
            BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
            BigInteger.prototype.drShiftTo = bnpDRShiftTo;
            BigInteger.prototype.lShiftTo = bnpLShiftTo;
            BigInteger.prototype.rShiftTo = bnpRShiftTo;
            BigInteger.prototype.subTo = bnpSubTo;
            BigInteger.prototype.multiplyTo = bnpMultiplyTo;
            BigInteger.prototype.squareTo = bnpSquareTo;
            BigInteger.prototype.divRemTo = bnpDivRemTo;
            BigInteger.prototype.invDigit = bnpInvDigit;
            BigInteger.prototype.isEven = bnpIsEven;
            BigInteger.prototype.exp = bnpExp;
            BigInteger.prototype.toString = bnToString;
            BigInteger.prototype.negate = bnNegate;
            BigInteger.prototype.abs = bnAbs;
            BigInteger.prototype.compareTo = bnCompareTo;
            BigInteger.prototype.bitLength = bnBitLength;
            BigInteger.prototype.mod = bnMod;
            BigInteger.prototype.modPowInt = bnModPowInt;
            BigInteger.ZERO = nbv(0);
            BigInteger.ONE = nbv(1);
            function bnpFromRadix(s, b) {
                this.fromInt(0);
                if (b == null)b = 10;
                var cs = this.chunkSize(b);
                var d = Math.pow(b, cs), mi = false, j = 0, w = 0;
                for (var i = 0; i < s.length; ++i) {
                    var x = intAt(s, i);
                    if (x < 0) {
                        if (s.charAt(i) == "-" && this.signum() == 0)mi = true;
                        continue
                    }
                    w = b * w + x;
                    if (++j >= cs) {
                        this.dMultiply(d);
                        this.dAddOffset(w, 0);
                        j = 0;
                        w = 0
                    }
                }
                if (j > 0) {
                    this.dMultiply(Math.pow(b, j));
                    this.dAddOffset(w, 0)
                }
                if (mi)BigInteger.ZERO.subTo(this, this)
            }

            function bnpChunkSize(r) {
                return Math.floor(Math.LN2 * this.DB / Math.log(r))
            }

            function bnSigNum() {
                if (this.s < 0)return -1; else if (this.t <= 0 || this.t == 1 && this[0] <= 0)return 0; else return 1
            }

            function bnpDMultiply(n) {
                this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);
                ++this.t;
                this.clamp()
            }

            function bnpDAddOffset(n, w) {
                if (n == 0)return;
                while (this.t <= w)this[this.t++] = 0;
                this[w] += n;
                while (this[w] >= this.DV) {
                    this[w] -= this.DV;
                    if (++w >= this.t)this[this.t++] = 0;
                    ++this[w]
                }
            }

            function bnpToRadix(b) {
                if (b == null)b = 10;
                if (this.signum() == 0 || b < 2 || b > 36)return "0";
                var cs = this.chunkSize(b);
                var a = Math.pow(b, cs);
                var d = nbv(a), y = nbi(), z = nbi(), r = "";
                this.divRemTo(d, y, z);
                while (y.signum() > 0) {
                    r = (a + z.intValue()).toString(b).substr(1) + r;
                    y.divRemTo(d, y, z)
                }
                return z.intValue().toString(b) + r
            }

            function bnIntValue() {
                if (this.s < 0) {
                    if (this.t == 1)return this[0] - this.DV; else if (this.t == 0)return -1
                } else if (this.t == 1)return this[0]; else if (this.t == 0)return 0;
                return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
            }

            function bnpAddTo(a, r) {
                var i = 0, c = 0, m = Math.min(a.t, this.t);
                while (i < m) {
                    c += this[i] + a[i];
                    r[i++] = c & this.DM;
                    c >>= this.DB
                }
                if (a.t < this.t) {
                    c += a.s;
                    while (i < this.t) {
                        c += this[i];
                        r[i++] = c & this.DM;
                        c >>= this.DB
                    }
                    c += this.s
                } else {
                    c += this.s;
                    while (i < a.t) {
                        c += a[i];
                        r[i++] = c & this.DM;
                        c >>= this.DB
                    }
                    c += a.s
                }
                r.s = c < 0 ? -1 : 0;
                if (c > 0)r[i++] = c; else if (c < -1)r[i++] = this.DV + c;
                r.t = i;
                r.clamp()
            }

            BigInteger.prototype.fromRadix = bnpFromRadix;
            BigInteger.prototype.chunkSize = bnpChunkSize;
            BigInteger.prototype.signum = bnSigNum;
            BigInteger.prototype.dMultiply = bnpDMultiply;
            BigInteger.prototype.dAddOffset = bnpDAddOffset;
            BigInteger.prototype.toRadix = bnpToRadix;
            BigInteger.prototype.intValue = bnIntValue;
            BigInteger.prototype.addTo = bnpAddTo;
            var Wrapper = {
                abs: (function (l, h) {
                    var x = new goog.math.Long(l, h);
                    var ret;
                    if (x.isNegative()) {
                        ret = x.negate()
                    } else {
                        ret = x
                    }
                    HEAP32[tempDoublePtr >> 2] = ret.low_;
                    HEAP32[tempDoublePtr + 4 >> 2] = ret.high_
                }), ensureTemps: (function () {
                    if (Wrapper.ensuredTemps)return;
                    Wrapper.ensuredTemps = true;
                    Wrapper.two32 = new BigInteger;
                    Wrapper.two32.fromString("4294967296", 10);
                    Wrapper.two64 = new BigInteger;
                    Wrapper.two64.fromString("18446744073709551616", 10);
                    Wrapper.temp1 = new BigInteger;
                    Wrapper.temp2 = new BigInteger
                }), lh2bignum: (function (l, h) {
                    var a = new BigInteger;
                    a.fromString(h.toString(), 10);
                    var b = new BigInteger;
                    a.multiplyTo(Wrapper.two32, b);
                    var c = new BigInteger;
                    c.fromString(l.toString(), 10);
                    var d = new BigInteger;
                    c.addTo(b, d);
                    return d
                }), stringify: (function (l, h, unsigned) {
                    var ret = (new goog.math.Long(l, h)).toString();
                    if (unsigned && ret[0] == "-") {
                        Wrapper.ensureTemps();
                        var bignum = new BigInteger;
                        bignum.fromString(ret, 10);
                        ret = new BigInteger;
                        Wrapper.two64.addTo(bignum, ret);
                        ret = ret.toString(10)
                    }
                    return ret
                }), fromString: (function (str, base, min, max, unsigned) {
                    Wrapper.ensureTemps();
                    var bignum = new BigInteger;
                    bignum.fromString(str, base);
                    var bigmin = new BigInteger;
                    bigmin.fromString(min, 10);
                    var bigmax = new BigInteger;
                    bigmax.fromString(max, 10);
                    if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) {
                        var temp = new BigInteger;
                        bignum.addTo(Wrapper.two64, temp);
                        bignum = temp
                    }
                    var error = false;
                    if (bignum.compareTo(bigmin) < 0) {
                        bignum = bigmin;
                        error = true
                    } else if (bignum.compareTo(bigmax) > 0) {
                        bignum = bigmax;
                        error = true
                    }
                    var ret = goog.math.Long.fromString(bignum.toString());
                    HEAP32[tempDoublePtr >> 2] = ret.low_;
                    HEAP32[tempDoublePtr + 4 >> 2] = ret.high_;
                    if (error)throw"range error"
                })
            };
            return Wrapper
        })();
        if (memoryInitializer) {
            if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) {
                var data = Module["readBinary"](memoryInitializer);
                HEAPU8.set(data, STATIC_BASE)
            } else {
                addRunDependency("memory initializer");
                Browser.asyncLoad(memoryInitializer, (function (data) {
                    HEAPU8.set(data, STATIC_BASE);
                    removeRunDependency("memory initializer")
                }), (function (data) {
                    throw"could not load memory initializer " + memoryInitializer
                }))
            }
        }
        function ExitStatus(status) {
            this.name = "ExitStatus";
            this.message = "Program terminated with exit(" + status + ")";
            this.status = status
        }

        ExitStatus.prototype = new Error;
        ExitStatus.prototype.constructor = ExitStatus;
        var initialStackTop;
        var preloadStartTime = null;
        var calledMain = false;
        dependenciesFulfilled = function runCaller() {
            if (!Module["calledRun"] && shouldRunNow)run();
            if (!Module["calledRun"])dependenciesFulfilled = runCaller
        };
        Module["callMain"] = Module.callMain = function callMain(args) {
            assert(runDependencies == 0, "cannot call main when async dependencies remain! (listen on __ATMAIN__)");
            assert(__ATPRERUN__.length == 0, "cannot call main when preRun functions remain to be called");
            args = args || [];
            ensureInitRuntime();
            var argc = args.length + 1;

            function pad() {
                for (var i = 0; i < 4 - 1; i++) {
                    argv.push(0)
                }
            }

            var argv = [allocate(intArrayFromString(Module["thisProgram"] || "/bin/this.program"), "i8", ALLOC_NORMAL)];
            pad();
            for (var i = 0; i < argc - 1; i = i + 1) {
                argv.push(allocate(intArrayFromString(args[i]), "i8", ALLOC_NORMAL));
                pad()
            }
            argv.push(0);
            argv = allocate(argv, "i32", ALLOC_NORMAL);
            initialStackTop = STACKTOP;
            try {
                var ret = Module["_main"](argc, argv, 0);
                if (!Module["noExitRuntime"]) {
                    exit(ret)
                }
            } catch (e) {
                if (e instanceof ExitStatus) {
                    return
                } else if (e == "SimulateInfiniteLoop") {
                    Module["noExitRuntime"] = true;
                    return
                } else {
                    if (e && typeof e === "object" && e.stack)Module.printErr("exception thrown: " + [e, e.stack]);
                    throw e
                }
            } finally {
                calledMain = true
            }
        };
        function run(args) {
            args = args || Module["arguments"];
            if (preloadStartTime === null)preloadStartTime = Date.now();
            if (runDependencies > 0) {
                Module.printErr("run() called, but dependencies remain, so not running");
                return
            }
            preRun();
            if (runDependencies > 0)return;
            if (Module["calledRun"])return;
            function doRun() {
                if (Module["calledRun"])return;
                Module["calledRun"] = true;
                ensureInitRuntime();
                preMain();
                if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) {
                    Module.printErr("pre-main prep time: " + (Date.now() - preloadStartTime) + " ms")
                }
                if (Module["_main"] && shouldRunNow) {
                    Module["callMain"](args)
                }
                postRun()
            }

            if (Module["setStatus"]) {
                Module["setStatus"]("Running...");
                setTimeout((function () {
                    setTimeout((function () {
                        Module["setStatus"]("")
                    }), 1);
                    if (!ABORT)doRun()
                }), 1)
            } else {
                doRun()
            }
        }

        Module["run"] = Module.run = run;
        function exit(status) {
            ABORT = true;
            EXITSTATUS = status;
            STACKTOP = initialStackTop;
            exitRuntime();
            throw new ExitStatus(status)
        }

        Module["exit"] = Module.exit = exit;
        function abort(text) {
            if (text) {
                Module.print(text);
                Module.printErr(text)
            }
            ABORT = true;
            EXITSTATUS = 1;
            var extra = "\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";
            throw"abort() at " + stackTrace() + extra
        }

        Module["abort"] = Module.abort = abort;
        if (Module["preInit"]) {
            if (typeof Module["preInit"] == "function")Module["preInit"] = [Module["preInit"]];
            while (Module["preInit"].length > 0) {
                Module["preInit"].pop()()
            }
        }
        var shouldRunNow = true;
        if (Module["noInitialRun"]) {
            shouldRunNow = false
        }
        run()

        module.exports = Module

    }, {}], 2: [function (require, module, exports) {
        (function (global) {
            var AV = (typeof window !== "undefined" ? window.AV : typeof global !== "undefined" ? global.AV : null);
            var Ogg = require('../build/libogg');

            var OggDemuxer = AV.Demuxer.extend(function () {
                AV.Demuxer.register(this);

                this.probe = function (buffer) {
                    return buffer.peekString(0, 4) === 'OggS';
                };

                this.plugins = [];
                var BUFFER_SIZE = 8192;

                this.prototype.init = function () {
                    this.ogg = Ogg._AVOggInit();
                    this.buf = Ogg._malloc(BUFFER_SIZE);

                    var self = this;
                    var plugin = null;
                    var doneHeaders = false;

                    // copy the stream in case we override it, e.g. flac
                    this._stream = this.stream;

                    this.callback = Ogg.Runtime.addFunction(function (packet, bytes) {
                        var data = new Uint8Array(Ogg.HEAPU8.subarray(packet, packet + bytes));

                        // find plugin for codec
                        if (!plugin) {
                            for (var i = 0; i < OggDemuxer.plugins.length; i++) {
                                var cur = OggDemuxer.plugins[i];
                                var magic = data.subarray(0, cur.magic.length);
                                if (String.fromCharCode.apply(String, magic) === cur.magic) {
                                    plugin = cur;
                                    break;
                                }
                            }

                            if (!plugin)
                                throw new Error("Unknown format in Ogg file.");

                            if (plugin.init)
                                plugin.init.call(self);
                        }

                        // send packet to plugin
                        if (!doneHeaders)
                            doneHeaders = plugin.readHeaders.call(self, data);
                        else
                            plugin.readPacket.call(self, data);
                    });
                };

                this.prototype.readChunk = function () {
                    while (this._stream.available(BUFFER_SIZE)) {
                        Ogg.HEAPU8.set(this._stream.readBuffer(BUFFER_SIZE).data, this.buf);
                        Ogg._AVOggRead(this.ogg, this.buf, BUFFER_SIZE, this.callback);
                    }
                };

                this.prototype.destroy = function () {
                    this._super();
                    Ogg.Runtime.removeFunction(this.callback);
                    Ogg._AVOggDestroy(this.ogg);
                    Ogg._free(this.buf);

                    this.ogg = null;
                    this.buf = null;
                    this.callback = null;
                };
            });

            module.exports = OggDemuxer;
            AV.OggDemuxer = OggDemuxer; // for browser

        }).call(this, typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
    }, {"../build/libogg": 1}]
}, {}, [2])