Advertisement
Guest User

webp encoder/decoder in javascript; libwebpjs.appspot.com

a guest
Nov 19th, 2011
1,510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var WebPZlib = (function WebPZlib() {
  2.     var dd = (function () {
  3.         var o = 32768;
  4.         var r = 0;
  5.         var s = 1;
  6.         var t = 2;
  7.         var u = 6;
  8.         var x = true;
  9.         var y = 32768;
  10.         var z = 64;
  11.         var A = 1024 * 8;
  12.         var B = 2 * o;
  13.         var C = 3;
  14.         var D = 258;
  15.         var E = 16;
  16.         var F = 0x2000;
  17.         var G = 13;
  18.         if (F > y) alert("error: zip_INBUFSIZ is too small");
  19.         if ((o << 1) > (1 << E)) alert("error: zip_WSIZE is too large");
  20.         if (G > E - 1) alert("error: zip_HASH_BITS is too large");
  21.         if (G < 8 || D != 258) alert("error: Code too clever");
  22.         var H = F;
  23.         var I = 1 << G;
  24.         var J = I - 1;
  25.         var K = o - 1;
  26.         var L = 0;
  27.         var M = 4096;
  28.         var N = D + C + 1;
  29.         var O = o - N;
  30.         var P = 1;
  31.         var Q = 15;
  32.         var R = 7;
  33.         var S = 29;
  34.         var T = 256;
  35.         var U = 256;
  36.         var V = T + 1 + S;
  37.         var W = 30;
  38.         var X = 19;
  39.         var Y = 16;
  40.         var Z = 17;
  41.         var de = 18;
  42.         var df = 2 * V + 1;
  43.         var dg = parseInt((G + C - 1) / C, 10);
  44.         var dh;
  45.         var di, zip_qtail;
  46.         var dj;
  47.         var dk = null;
  48.         var dl, zip_outoff;
  49.         var dm;
  50.         var dn;
  51.         var dp;
  52.         var dq;
  53.         var dr;
  54.         var ds;
  55.         var dt;
  56.         var du;
  57.         var dv;
  58.         var dw;
  59.         var dx;
  60.         var dy;
  61.         var dz;
  62.         var dA;
  63.         var dB;
  64.         var dC;
  65.         var dD;
  66.         var dE;
  67.         var dF;
  68.         var dG;
  69.         var dH;
  70.         var dI;
  71.         var dJ;
  72.         var dK;
  73.         var dL;
  74.         var dM;
  75.         var dN;
  76.         var dO;
  77.         var dP;
  78.         var dQ;
  79.         var dR;
  80.         var dS;
  81.         var dT;
  82.         var dU;
  83.         var dV;
  84.         var dW;
  85.         var dX;
  86.         var dY;
  87.         var dZ;
  88.         var ea;
  89.         var eb;
  90.         var ec;
  91.         var ed;
  92.         var ee;
  93.         var ef;
  94.         var eg;
  95.         var eh;
  96.         var ei;
  97.         var ej;
  98.         var ek;
  99.         var el = function () {
  100.                 this.fc = 0;
  101.                 this.dl = 0
  102.             };
  103.         var em = function () {
  104.                 this.dyn_tree = null;
  105.                 this.static_tree = null;
  106.                 this.extra_bits = null;
  107.                 this.extra_base = 0;
  108.                 this.elems = 0;
  109.                 this.max_length = 0;
  110.                 this.max_code = 0
  111.             };
  112.         var en = function (a, b, c, d) {
  113.                 this.good_length = a;
  114.                 this.max_lazy = b;
  115.                 this.nice_length = c;
  116.                 this.max_chain = d
  117.             };
  118.         var eo = function () {
  119.                 this.next = null;
  120.                 this.len = 0;
  121.                 this.ptr = new Array(A);
  122.                 this.off = 0
  123.             };
  124.         var ep = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];
  125.         var eq = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
  126.         var er = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];
  127.         var es = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
  128.         var et = [new en(0, 0, 0, 0), new en(4, 4, 8, 4), new en(4, 5, 16, 8), new en(4, 6, 32, 32), new en(4, 4, 16, 16), new en(8, 16, 32, 32), new en(8, 16, 128, 128), new en(8, 32, 128, 256), new en(32, 128, 258, 1024), new en(32, 258, 258, 4096)];
  129.         var eu = function (a) {
  130.                 var i;
  131.                 if (!a) a = u;
  132.                 else if (a < 1) a = 1;
  133.                 else if (a > 9) a = 9;
  134.                 dH = a;
  135.                 dj = false;
  136.                 dD = false;
  137.                 if (dk != null) return;
  138.                 dh = di = zip_qtail = null;
  139.                 dk = new Array(A);
  140.                 dn = new Array(B);
  141.                 dp = new Array(H);
  142.                 dq = new Array(y + z);
  143.                 dr = new Array(1 << E);
  144.                 dK = new Array(df);
  145.                 for (i = 0; i < df; i++) dK[i] = new el();
  146.                 dL = new Array(2 * W + 1);
  147.                 for (i = 0; i < 2 * W + 1; i++) dL[i] = new el();
  148.                 dM = new Array(V + 2);
  149.                 for (i = 0; i < V + 2; i++) dM[i] = new el();
  150.                 dN = new Array(W);
  151.                 for (i = 0; i < W; i++) dN[i] = new el();
  152.                 dO = new Array(2 * X + 1);
  153.                 for (i = 0; i < 2 * X + 1; i++) dO[i] = new el();
  154.                 dP = new em();
  155.                 dQ = new em();
  156.                 dR = new em();
  157.                 dS = new Array(Q + 1);
  158.                 dT = new Array(2 * V + 1);
  159.                 dW = new Array(2 * V + 1);
  160.                 dX = new Array(D - C + 1);
  161.                 dY = new Array(512);
  162.                 dZ = new Array(S);
  163.                 ea = new Array(W);
  164.                 eb = new Array(parseInt(F / 8, 10))
  165.             };
  166.         var ev = function () {
  167.                 dh = di = zip_qtail = null;
  168.                 dk = null;
  169.                 dn = null;
  170.                 dp = null;
  171.                 dq = null;
  172.                 dr = null;
  173.                 dK = null;
  174.                 dL = null;
  175.                 dM = null;
  176.                 dN = null;
  177.                 dO = null;
  178.                 dP = null;
  179.                 dQ = null;
  180.                 dR = null;
  181.                 dS = null;
  182.                 dT = null;
  183.                 dW = null;
  184.                 dX = null;
  185.                 dY = null;
  186.                 dZ = null;
  187.                 ea = null;
  188.                 eb = null
  189.             };
  190.         var ew = function (p) {
  191.                 p.next = dh;
  192.                 dh = p
  193.             };
  194.         var ex = function () {
  195.                 var p;
  196.                 if (dh != null) {
  197.                     p = dh;
  198.                     dh = dh.next
  199.                 } else p = new eo();
  200.                 p.next = null;
  201.                 p.len = p.off = 0;
  202.                 return p
  203.             };
  204.         var ey = function (i) {
  205.                 return dr[o + i]
  206.             };
  207.         var ez = function (i, a) {
  208.                 return dr[o + i] = a
  209.             };
  210.         var eA = function (c) {
  211.                 dk[zip_outoff + dl++] = c;
  212.                 if (zip_outoff + dl == A) fg()
  213.             };
  214.         var eB = function (w) {
  215.                 w &= 0xffff;
  216.                 if (zip_outoff + dl < A - 2) {
  217.                     dk[zip_outoff + dl++] = (w & 0xff);
  218.                     dk[zip_outoff + dl++] = (w >>> 8)
  219.                 } else {
  220.                     eA(w & 0xff);
  221.                     eA(w >>> 8)
  222.                 }
  223.             };
  224.         var eC = function () {
  225.                 dv = ((dv << dg) ^ (dn[dB + C - 1] & 0xff)) & J;
  226.                 dw = ey(dv);
  227.                 dr[dB & K] = dw;
  228.                 ez(dv, dB)
  229.             };
  230.         var eD = function (c, a) {
  231.                 fd(a[c].fc, a[c].dl)
  232.             };
  233.         var eE = function (a) {
  234.                 return (a < 256 ? dY[a] : dY[256 + (a >> 7)]) & 0xff
  235.             };
  236.         var eF = function (a, n, m) {
  237.                 return a[n].fc < a[m].fc || (a[n].fc == a[m].fc && dW[n] <= dW[m])
  238.             };
  239.         var eG = function (a, b, n) {
  240.                 var i;
  241.                 var l = ej.length;
  242.                 for (i = 0; i < n && ek < l; i += 1) {
  243.                     a[b + i] = ej[ek++]
  244.                 }
  245.                 return i
  246.             };
  247.         var eH = function () {
  248.                 var j;
  249.                 for (j = 0; j < I; j++) dr[o + j] = 0;
  250.                 dG = et[dH].max_lazy;
  251.                 dI = et[dH].good_length;
  252.                 if (!x) dJ = et[dH].nice_length;
  253.                 dF = et[dH].max_chain;
  254.                 dB = 0;
  255.                 du = 0;
  256.                 dE = eG(dn, 0, 2 * o);
  257.                 if (dE <= 0) {
  258.                     dD = true;
  259.                     dE = 0;
  260.                     return
  261.                 }
  262.                 dD = false;
  263.                 while (dE < N && !dD) eJ();
  264.                 dv = 0;
  265.                 for (j = 0; j < C - 1; j++) {
  266.                     dv = ((dv << dg) ^ (dn[j] & 0xff)) & J
  267.                 }
  268.             };
  269.         var eI = function (a) {
  270.                 var b = dF;
  271.                 var c = dB;
  272.                 var d;
  273.                 var e;
  274.                 var f = dA;
  275.                 var g = (dB > O ? dB - O : L);
  276.                 var h = dB + D;
  277.                 var i = dn[c + f - 1];
  278.                 var j = dn[c + f];
  279.                 if (dA >= dI) b >>= 2;
  280.                 do {
  281.                     d = a;
  282.                     if (dn[d + f] != j || dn[d + f - 1] != i || dn[d] != dn[c] || dn[++d] != dn[c + 1]) {
  283.                         continue
  284.                     }
  285.                     c += 2;
  286.                     d++;
  287.                     do {} while (dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && dn[++c] == dn[++d] && c < h);
  288.                     e = D - (h - c);
  289.                     c = h - D;
  290.                     if (e > f) {
  291.                         dC = a;
  292.                         f = e;
  293.                         if (x) {
  294.                             if (e >= D) break
  295.                         } else {
  296.                             if (e >= dJ) break
  297.                         }
  298.                         i = dn[c + f - 1];
  299.                         j = dn[c + f]
  300.                     }
  301.                 } while ((a = dr[a & K]) > g && --b != 0);
  302.                 return f
  303.             };
  304.         var eJ = function () {
  305.                 var n, m;
  306.                 var a = B - dE - dB;
  307.                 if (a == -1) {
  308.                     a--
  309.                 } else if (dB >= o + O) {
  310.                     for (n = 0; n < o; n++) dn[n] = dn[n + o];
  311.                     dC -= o;
  312.                     dB -= o;
  313.                     du -= o;
  314.                     for (n = 0; n < I; n++) {
  315.                         m = ey(n);
  316.                         ez(n, m >= o ? m - o : L)
  317.                     }
  318.                     for (n = 0; n < o; n++) {
  319.                         m = dr[n];
  320.                         dr[n] = (m >= o ? m - o : L)
  321.                     }
  322.                     a += o
  323.                 }
  324.                 if (!dD) {
  325.                     n = eG(dn, dB + dE, a);
  326.                     if (n <= 0) dD = true;
  327.                     else dE += n
  328.                 }
  329.             };
  330.         var eK = function () {
  331.                 while (dE != 0 && di == null) {
  332.                     var a;
  333.                     eC();
  334.                     if (dw != L && dB - dw <= O) {
  335.                         dz = eI(dw);
  336.                         if (dz > dE) dz = dE
  337.                     }
  338.                     if (dz >= C) {
  339.                         a = fa(dB - dC, dz - C);
  340.                         dE -= dz;
  341.                         if (dz <= dG) {
  342.                             dz--;
  343.                             do {
  344.                                 dB++;
  345.                                 eC()
  346.                             } while (--dz != 0);
  347.                             dB++
  348.                         } else {
  349.                             dB += dz;
  350.                             dz = 0;
  351.                             dv = dn[dB] & 0xff;
  352.                             dv = ((dv << dg) ^ (dn[dB + 1] & 0xff)) & J
  353.                         }
  354.                     } else {
  355.                         a = fa(0, dn[dB] & 0xff);
  356.                         dE--;
  357.                         dB++
  358.                     }
  359.                     if (a) {
  360.                         eZ(0);
  361.                         du = dB
  362.                     }
  363.                     while (dE < N && !dD) eJ()
  364.                 }
  365.             };
  366.         var eL = function () {
  367.                 while (dE != 0 && di == null) {
  368.                     eC();
  369.                     dA = dz;
  370.                     dx = dC;
  371.                     dz = C - 1;
  372.                     if (dw != L && dA < dG && dB - dw <= O) {
  373.                         dz = eI(dw);
  374.                         if (dz > dE) dz = dE;
  375.                         if (dz == C && dB - dC > M) {
  376.                             dz--
  377.                         }
  378.                     }
  379.                     if (dA >= C && dz <= dA) {
  380.                         var a;
  381.                         a = fa(dB - 1 - dx, dA - C);
  382.                         dE -= dA - 1;
  383.                         dA -= 2;
  384.                         do {
  385.                             dB++;
  386.                             eC()
  387.                         } while (--dA != 0);
  388.                         dy = 0;
  389.                         dz = C - 1;
  390.                         dB++;
  391.                         if (a) {
  392.                             eZ(0);
  393.                             du = dB
  394.                         }
  395.                     } else if (dy != 0) {
  396.                         if (fa(0, dn[dB - 1] & 0xff)) {
  397.                             eZ(0);
  398.                             du = dB
  399.                         }
  400.                         dB++;
  401.                         dE--
  402.                     } else {
  403.                         dy = 1;
  404.                         dB++;
  405.                         dE--
  406.                     }
  407.                     while (dE < N && !dD) eJ()
  408.                 }
  409.             };
  410.         var eM = function () {
  411.                 if (dD) return;
  412.                 ds = 0;
  413.                 dt = 0;
  414.                 eP();
  415.                 eH();
  416.                 di = null;
  417.                 dl = 0;
  418.                 zip_outoff = 0;
  419.                 if (dH <= 3) {
  420.                     dA = C - 1;
  421.                     dz = 0
  422.                 } else {
  423.                     dz = C - 1;
  424.                     dy = 0
  425.                 }
  426.                 dm = false
  427.             };
  428.         var eN = function (a, b, c) {
  429.                 var n;
  430.                 if (!dj) {
  431.                     eM();
  432.                     dj = true;
  433.                     if (dE == 0) {
  434.                         dm = true;
  435.                         return 0
  436.                     }
  437.                 }
  438.                 if ((n = eO(a, b, c)) == c) return c;
  439.                 if (dm) return n;
  440.                 if (dH <= 3) eK();
  441.                 else eL();
  442.                 if (dE == 0) {
  443.                     if (dy != 0) {
  444.                         fa(0, dn[dB - 1] & 0xff)
  445.                     }
  446.                     eZ(1);
  447.                     dm = true
  448.                 }
  449.                 return n + eO(a, n + b, c - n)
  450.             };
  451.         var eO = function (a, b, c) {
  452.                 var n, i, j;
  453.                 n = 0;
  454.                 while (di != null && n < c) {
  455.                     i = c - n;
  456.                     if (i > di.len) i = di.len;
  457.                     for (j = 0; j < i; j++) {
  458.                         a[b + n + j] = di.ptr[di.off + j]
  459.                     }
  460.                     di.off += i;
  461.                     di.len -= i;
  462.                     n += i;
  463.                     if (di.len == 0) {
  464.                         var p;
  465.                         p = di;
  466.                         di = di.next;
  467.                         ew(p)
  468.                     }
  469.                 }
  470.                 if (n == c) {
  471.                     return n
  472.                 }
  473.                 if (zip_outoff < dl) {
  474.                     i = c - n;
  475.                     if (i > dl - zip_outoff) {
  476.                         i = dl - zip_outoff
  477.                     }
  478.                     for (j = 0; j < i; j++) {
  479.                         a[b + n + j] = dk[zip_outoff + j]
  480.                     }
  481.                     zip_outoff += i;
  482.                     n += i;
  483.                     if (dl == zip_outoff) {
  484.                         dl = zip_outoff = 0
  485.                     }
  486.                 }
  487.                 return n
  488.             };
  489.         var eP = function () {
  490.                 var n;
  491.                 var a;
  492.                 var b;
  493.                 var c;
  494.                 var d;
  495.                 if (dN[0].dl != 0) return;
  496.                 dP.dyn_tree = dK;
  497.                 dP.static_tree = dM;
  498.                 dP.extra_bits = ep;
  499.                 dP.extra_base = T + 1;
  500.                 dP.elems = V;
  501.                 dP.max_length = Q;
  502.                 dP.max_code = 0;
  503.                 dQ.dyn_tree = dL;
  504.                 dQ.static_tree = dN;
  505.                 dQ.extra_bits = eq;
  506.                 dQ.extra_base = 0;
  507.                 dQ.elems = W;
  508.                 dQ.max_length = Q;
  509.                 dQ.max_code = 0;
  510.                 dR.dyn_tree = dO;
  511.                 dR.static_tree = null;
  512.                 dR.extra_bits = er;
  513.                 dR.extra_base = 0;
  514.                 dR.elems = X;
  515.                 dR.max_length = R;
  516.                 dR.max_code = 0;
  517.                 b = 0;
  518.                 for (c = 0; c < S - 1; c++) {
  519.                     dZ[c] = b;
  520.                     for (n = 0; n < (1 << ep[c]); n++) dX[b++] = c
  521.                 }
  522.                 dX[b - 1] = c;
  523.                 d = 0;
  524.                 for (c = 0; c < 16; c++) {
  525.                     ea[c] = d;
  526.                     for (n = 0; n < (1 << eq[c]); n++) {
  527.                         dY[d++] = c
  528.                     }
  529.                 }
  530.                 d >>= 7;
  531.                 for (; c < W; c++) {
  532.                     ea[c] = d << 7;
  533.                     for (n = 0; n < (1 << (eq[c] - 7)); n++) dY[256 + d++] = c
  534.                 }
  535.                 for (a = 0; a <= Q; a++) dS[a] = 0;
  536.                 n = 0;
  537.                 while (n <= 143) {
  538.                     dM[n++].dl = 8;
  539.                     dS[8]++
  540.                 }
  541.                 while (n <= 255) {
  542.                     dM[n++].dl = 9;
  543.                     dS[9]++
  544.                 }
  545.                 while (n <= 279) {
  546.                     dM[n++].dl = 7;
  547.                     dS[7]++
  548.                 }
  549.                 while (n <= 287) {
  550.                     dM[n++].dl = 8;
  551.                     dS[8]++
  552.                 }
  553.                 eT(dM, V + 1);
  554.                 for (n = 0; n < W; n++) {
  555.                     dN[n].dl = 5;
  556.                     dN[n].fc = fe(n, 5)
  557.                 }
  558.                 eQ()
  559.             };
  560.         var eQ = function () {
  561.                 var n;
  562.                 for (n = 0; n < V; n++) dK[n].fc = 0;
  563.                 for (n = 0; n < W; n++) dL[n].fc = 0;
  564.                 for (n = 0; n < X; n++) dO[n].fc = 0;
  565.                 dK[U].fc = 1;
  566.                 eh = ei = 0;
  567.                 ec = ed = ee = 0;
  568.                 ef = 0;
  569.                 eg = 1
  570.             };
  571.         var eR = function (a, k) {
  572.                 var v = dT[k];
  573.                 var j = k << 1;
  574.                 while (j <= dU) {
  575.                     if (j < dU && eF(a, dT[j + 1], dT[j])) j++;
  576.                     if (eF(a, v, dT[j])) break;
  577.                     dT[k] = dT[j];
  578.                     k = j;
  579.                     j <<= 1
  580.                 }
  581.                 dT[k] = v
  582.             };
  583.         var eS = function (a) {
  584.                 var b = a.dyn_tree;
  585.                 var c = a.extra_bits;
  586.                 var d = a.extra_base;
  587.                 var e = a.max_code;
  588.                 var g = a.max_length;
  589.                 var i = a.static_tree;
  590.                 var h;
  591.                 var n, m;
  592.                 var j;
  593.                 var k;
  594.                 var f;
  595.                 var l = 0;
  596.                 for (j = 0; j <= Q; j++) dS[j] = 0;
  597.                 b[dT[dV]].dl = 0;
  598.                 for (h = dV + 1; h < df; h++) {
  599.                     n = dT[h];
  600.                     j = b[b[n].dl].dl + 1;
  601.                     if (j > g) {
  602.                         j = g;
  603.                         l++
  604.                     }
  605.                     b[n].dl = j;
  606.                     if (n > e) continue;
  607.                     dS[j]++;
  608.                     k = 0;
  609.                     if (n >= d) k = c[n - d];
  610.                     f = b[n].fc;
  611.                     eh += f * (j + k);
  612.                     if (i != null) ei += f * (i[n].dl + k)
  613.                 }
  614.                 if (l == 0) return;
  615.                 do {
  616.                     j = g - 1;
  617.                     while (dS[j] == 0) j--;
  618.                     dS[j]--;
  619.                     dS[j + 1] += 2;
  620.                     dS[g]--;
  621.                     l -= 2
  622.                 } while (l > 0);
  623.                 for (j = g; j != 0; j--) {
  624.                     n = dS[j];
  625.                     while (n != 0) {
  626.                         m = dT[--h];
  627.                         if (m > e) continue;
  628.                         if (b[m].dl != j) {
  629.                             eh += (j - b[m].dl) * b[m].fc;
  630.                             b[m].fc = j
  631.                         }
  632.                         n--
  633.                     }
  634.                 }
  635.             };
  636.         var eT = function (a, b) {
  637.                 var c = new Array(Q + 1);
  638.                 var d = 0;
  639.                 var e;
  640.                 var n;
  641.                 for (e = 1; e <= Q; e++) {
  642.                     d = ((d + dS[e - 1]) << 1);
  643.                     c[e] = d
  644.                 }
  645.                 for (n = 0; n <= b; n++) {
  646.                     var f = a[n].dl;
  647.                     if (f == 0) continue;
  648.                     a[n].fc = fe(c[f]++, f)
  649.                 }
  650.             };
  651.         var eU = function (a) {
  652.                 var b = a.dyn_tree;
  653.                 var c = a.static_tree;
  654.                 var d = a.elems;
  655.                 var n, m;
  656.                 var e = -1;
  657.                 var f = d;
  658.                 dU = 0;
  659.                 dV = df;
  660.                 for (n = 0; n < d; n++) {
  661.                     if (b[n].fc != 0) {
  662.                         dT[++dU] = e = n;
  663.                         dW[n] = 0
  664.                     } else b[n].dl = 0
  665.                 }
  666.                 while (dU < 2) {
  667.                     var g = dT[++dU] = (e < 2 ? ++e : 0);
  668.                     b[g].fc = 1;
  669.                     dW[g] = 0;
  670.                     eh--;
  671.                     if (c != null) ei -= c[g].dl
  672.                 }
  673.                 a.max_code = e;
  674.                 for (n = dU >> 1; n >= 1; n--) eR(b, n);
  675.                 do {
  676.                     n = dT[P];
  677.                     dT[P] = dT[dU--];
  678.                     eR(b, P);
  679.                     m = dT[P];
  680.                     dT[--dV] = n;
  681.                     dT[--dV] = m;
  682.                     b[f].fc = b[n].fc + b[m].fc;
  683.                     if (dW[n] > dW[m] + 1) dW[f] = dW[n];
  684.                     else dW[f] = dW[m] + 1;
  685.                     b[n].dl = b[m].dl = f;
  686.                     dT[P] = f++;
  687.                     eR(b, P)
  688.                 } while (dU >= 2);
  689.                 dT[--dV] = dT[P];
  690.                 eS(a);
  691.                 eT(b, e)
  692.             };
  693.         var eV = function (a, b) {
  694.                 var n;
  695.                 var c = -1;
  696.                 var d;
  697.                 var e = a[0].dl;
  698.                 var f = 0;
  699.                 var g = 7;
  700.                 var h = 4;
  701.                 if (e == 0) {
  702.                     g = 138;
  703.                     h = 3
  704.                 }
  705.                 a[b + 1].dl = 0xffff;
  706.                 for (n = 0; n <= b; n++) {
  707.                     d = e;
  708.                     e = a[n + 1].dl;
  709.                     if (++f < g && d == e) continue;
  710.                     else if (f < h) dO[d].fc += f;
  711.                     else if (d != 0) {
  712.                         if (d != c) dO[d].fc++;
  713.                         dO[Y].fc++
  714.                     } else if (f <= 10) dO[Z].fc++;
  715.                     else dO[de].fc++;
  716.                     f = 0;
  717.                     c = d;
  718.                     if (e == 0) {
  719.                         g = 138;
  720.                         h = 3
  721.                     } else if (d == e) {
  722.                         g = 6;
  723.                         h = 3
  724.                     } else {
  725.                         g = 7;
  726.                         h = 4
  727.                     }
  728.                 }
  729.             };
  730.         var eW = function (a, b) {
  731.                 var n;
  732.                 var c = -1;
  733.                 var d;
  734.                 var e = a[0].dl;
  735.                 var f = 0;
  736.                 var g = 7;
  737.                 var h = 4;
  738.                 if (e == 0) {
  739.                     g = 138;
  740.                     h = 3
  741.                 }
  742.                 for (n = 0; n <= b; n++) {
  743.                     d = e;
  744.                     e = a[n + 1].dl;
  745.                     if (++f < g && d == e) {
  746.                         continue
  747.                     } else if (f < h) {
  748.                         do {
  749.                             eD(d, dO)
  750.                         } while (--f != 0)
  751.                     } else if (d != 0) {
  752.                         if (d != c) {
  753.                             eD(d, dO);
  754.                             f--
  755.                         }
  756.                         eD(Y, dO);
  757.                         fd(f - 3, 2)
  758.                     } else if (f <= 10) {
  759.                         eD(Z, dO);
  760.                         fd(f - 3, 3)
  761.                     } else {
  762.                         eD(de, dO);
  763.                         fd(f - 11, 7)
  764.                     }
  765.                     f = 0;
  766.                     c = d;
  767.                     if (e == 0) {
  768.                         g = 138;
  769.                         h = 3
  770.                     } else if (d == e) {
  771.                         g = 6;
  772.                         h = 3
  773.                     } else {
  774.                         g = 7;
  775.                         h = 4
  776.                     }
  777.                 }
  778.             };
  779.         var eX = function () {
  780.                 var a;
  781.                 eV(dK, dP.max_code);
  782.                 eV(dL, dQ.max_code);
  783.                 eU(dR);
  784.                 for (a = X - 1; a >= 3; a--) {
  785.                     if (dO[es[a]].dl != 0) break
  786.                 }
  787.                 eh += 3 * (a + 1) + 5 + 5 + 4;
  788.                 return a
  789.             };
  790.         var eY = function (a, b, c) {
  791.                 var d;
  792.                 fd(a - 257, 5);
  793.                 fd(b - 1, 5);
  794.                 fd(c - 4, 4);
  795.                 for (d = 0; d < c; d++) {
  796.                     fd(dO[es[d]].dl, 3)
  797.                 }
  798.                 eW(dK, a - 1);
  799.                 eW(dL, b - 1)
  800.             };
  801.         var eZ = function (a) {
  802.                 var b, static_lenb;
  803.                 var c;
  804.                 var d;
  805.                 d = dB - du;
  806.                 eb[ee] = ef;
  807.                 eU(dP);
  808.                 eU(dQ);
  809.                 c = eX();
  810.                 b = (eh + 3 + 7) >> 3;
  811.                 static_lenb = (ei + 3 + 7) >> 3;
  812.                 if (static_lenb <= b) b = static_lenb;
  813.                 if (d + 4 <= b && du >= 0) {
  814.                     var i;
  815.                     fd((r << 1) + a, 3);
  816.                     ff();
  817.                     eB(d);
  818.                     eB(~d);
  819.                     for (i = 0; i < d; i++) eA(dn[du + i])
  820.                 } else if (static_lenb == b) {
  821.                     fd((s << 1) + a, 3);
  822.                     fb(dM, dN)
  823.                 } else {
  824.                     fd((t << 1) + a, 3);
  825.                     eY(dP.max_code + 1, dQ.max_code + 1, c + 1);
  826.                     fb(dK, dL)
  827.                 }
  828.                 eQ();
  829.                 if (a != 0) ff()
  830.             };
  831.         var fa = function (a, b) {
  832.                 dq[ec++] = b;
  833.                 if (a == 0) {
  834.                     dK[b].fc++
  835.                 } else {
  836.                     a--;
  837.                     dK[dX[b] + T + 1].fc++;
  838.                     dL[eE(a)].fc++;
  839.                     dp[ed++] = a;
  840.                     ef |= eg
  841.                 }
  842.                 eg <<= 1;
  843.                 if ((ec & 7) == 0) {
  844.                     eb[ee++] = ef;
  845.                     ef = 0;
  846.                     eg = 1
  847.                 }
  848.                 if (dH > 2 && (ec & 0xfff) == 0) {
  849.                     var c = ec * 8;
  850.                     var d = dB - du;
  851.                     var e;
  852.                     for (e = 0; e < W; e++) {
  853.                         c += dL[e].fc * (5 + eq[e])
  854.                     }
  855.                     c >>= 3;
  856.                     if (ed < parseInt(ec / 2, 10) && c < parseInt(d / 2, 10)) return true
  857.                 }
  858.                 return (ec == F - 1 || ed == H)
  859.             };
  860.         var fb = function (a, b) {
  861.                 var c;
  862.                 var d;
  863.                 var e = 0;
  864.                 var f = 0;
  865.                 var g = 0;
  866.                 var h = 0;
  867.                 var i;
  868.                 var j;
  869.                 if (ec != 0) do {
  870.                     if ((e & 7) == 0) h = eb[g++];
  871.                     d = dq[e++] & 0xff;
  872.                     if ((h & 1) == 0) {
  873.                         eD(d, a)
  874.                     } else {
  875.                         i = dX[d];
  876.                         eD(i + T + 1, a);
  877.                         j = ep[i];
  878.                         if (j != 0) {
  879.                             d -= dZ[i];
  880.                             fd(d, j)
  881.                         }
  882.                         c = dp[f++];
  883.                         i = eE(c);
  884.                         eD(i, b);
  885.                         j = eq[i];
  886.                         if (j != 0) {
  887.                             c -= ea[i];
  888.                             fd(c, j)
  889.                         }
  890.                     }
  891.                     h >>= 1
  892.                 } while (e < ec);
  893.                 eD(U, a)
  894.             };
  895.         var fc = 16;
  896.         var fd = function (a, b) {
  897.                 if (dt > fc - b) {
  898.                     ds |= (a << dt);
  899.                     eB(ds);
  900.                     ds = (a >> (fc - dt));
  901.                     dt += b - fc
  902.                 } else {
  903.                     ds |= a << dt;
  904.                     dt += b
  905.                 }
  906.             };
  907.         var fe = function (a, b) {
  908.                 var c = 0;
  909.                 do {
  910.                     c |= a & 1;
  911.                     a >>= 1;
  912.                     c <<= 1
  913.                 } while (--b > 0);
  914.                 return c >> 1
  915.             };
  916.         var ff = function () {
  917.                 if (dt > 8) {
  918.                     eB(ds)
  919.                 } else if (dt > 0) {
  920.                     eA(ds)
  921.                 }
  922.                 ds = 0;
  923.                 dt = 0
  924.             };
  925.         var fg = function () {
  926.                 if (dl != 0) {
  927.                     var q, i;
  928.                     q = ex();
  929.                     if (di == null) di = zip_qtail = q;
  930.                     else zip_qtail = zip_qtail.next = q;
  931.                     q.len = dl - zip_outoff;
  932.                     for (i = 0; i < q.len; i++) q.ptr[i] = dk[zip_outoff + i];
  933.                     dl = zip_outoff = 0
  934.                 }
  935.             };
  936.         var fh = function (a, b) {
  937.                 var i, j;
  938.                 ej = a;
  939.                 ek = 0;
  940.                 if (typeof b == "undefined") {
  941.                     b = u
  942.                 }
  943.                 eu(b);
  944.                 var c = [0];
  945.                 var d = [];
  946.                 while ((i = eN(c, 0, c.length)) > 0) {
  947.                     d.push(c[0])
  948.                 }
  949.                 ej = null;
  950.                 return d
  951.             };
  952.         return fh
  953.     })();
  954.     var fi = (function () {
  955.         var D = 32768;
  956.         var E = 0;
  957.         var F = 1;
  958.         var G = 2;
  959.         var H = 9;
  960.         var I = 6;
  961.         var J = 32768;
  962.         var K = 64;
  963.         var L;
  964.         var M;
  965.         var N = null;
  966.         var O;
  967.         var P, fixed_bd;
  968.         var Q;
  969.         var R;
  970.         var S;
  971.         var T;
  972.         var U;
  973.         var V;
  974.         var W, zip_td;
  975.         var X, zip_bd;
  976.         var Y;
  977.         var Z;
  978.         var de = new Array(0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff);
  979.         var df = new Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);
  980.         var dg = new Array(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99);
  981.         var dh = new Array(1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577);
  982.         var di = new Array(0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13);
  983.         var dj = new Array(16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);
  984.         var dk = function () {
  985.                 this.next = null;
  986.                 this.list = null
  987.             };
  988.         var dl = function () {
  989.                 this.e = 0;
  990.                 this.b = 0;
  991.                 this.n = 0;
  992.                 this.t = null
  993.             };
  994.         var dm = function (b, n, s, d, e, l) {
  995.                 this.BMAX = 16;
  996.                 this.N_MAX = 288;
  997.                 this.status = 0;
  998.                 this.root = null;
  999.                 this.m = 0; {
  1000.                     var a;
  1001.                     var c = new Array(this.BMAX + 1);
  1002.                     var m;
  1003.                     var f;
  1004.                     var g;
  1005.                     var h;
  1006.                     var i;
  1007.                     var j;
  1008.                     var k;
  1009.                     var t = new Array(this.BMAX + 1);
  1010.                     var p;
  1011.                     var A;
  1012.                     var q;
  1013.                     var r = new dl();
  1014.                     var u = new Array(this.BMAX);
  1015.                     var v = new Array(this.N_MAX);
  1016.                     var w;
  1017.                     var x = new Array(this.BMAX + 1);
  1018.                     var B;
  1019.                     var y;
  1020.                     var z;
  1021.                     var o;
  1022.                     var C;
  1023.                     C = this.root = null;
  1024.                     for (i = 0; i < c.length; i++) c[i] = 0;
  1025.                     for (i = 0; i < t.length; i++) t[i] = 0;
  1026.                     for (i = 0; i < u.length; i++) u[i] = null;
  1027.                     for (i = 0; i < v.length; i++) v[i] = 0;
  1028.                     for (i = 0; i < x.length; i++) x[i] = 0;
  1029.                     m = n > 256 ? b[256] : this.BMAX;
  1030.                     p = b;
  1031.                     A = 0;
  1032.                     i = n;
  1033.                     do {
  1034.                         c[p[A]]++;
  1035.                         A++
  1036.                     } while (--i > 0);
  1037.                     if (c[0] == n) {
  1038.                         this.root = null;
  1039.                         this.m = 0;
  1040.                         this.status = 0;
  1041.                         return
  1042.                     }
  1043.                     for (j = 1; j <= this.BMAX; j++) if (c[j] != 0) break;
  1044.                     k = j;
  1045.                     if (l < j) l = j;
  1046.                     for (i = this.BMAX; i != 0; i--) if (c[i] != 0) break;
  1047.                     g = i;
  1048.                     if (l > i) l = i;
  1049.                     for (y = 1 << j; j < i; j++, y <<= 1) if ((y -= c[j]) < 0) {
  1050.                         this.status = 2;
  1051.                         this.m = l;
  1052.                         return
  1053.                     }
  1054.                     if ((y -= c[i]) < 0) {
  1055.                         this.status = 2;
  1056.                         this.m = l;
  1057.                         return
  1058.                     }
  1059.                     c[i] += y;
  1060.                     x[1] = j = 0;
  1061.                     p = c;
  1062.                     A = 1;
  1063.                     B = 2;
  1064.                     while (--i > 0) x[B++] = (j += p[A++]);
  1065.                     p = b;
  1066.                     A = 0;
  1067.                     i = 0;
  1068.                     do {
  1069.                         if ((j = p[A++]) != 0) v[x[j]++] = i
  1070.                     } while (++i < n);
  1071.                     n = x[g];
  1072.                     x[0] = i = 0;
  1073.                     p = v;
  1074.                     A = 0;
  1075.                     h = -1;
  1076.                     w = t[0] = 0;
  1077.                     q = null;
  1078.                     z = 0;
  1079.                     for (; k <= g; k++) {
  1080.                         a = c[k];
  1081.                         while (a-- > 0) {
  1082.                             while (k > w + t[1 + h]) {
  1083.                                 w += t[1 + h];
  1084.                                 h++;
  1085.                                 z = (z = g - w) > l ? l : z;
  1086.                                 if ((f = 1 << (j = k - w)) > a + 1) {
  1087.                                     f -= a + 1;
  1088.                                     B = k;
  1089.                                     while (++j < z) {
  1090.                                         if ((f <<= 1) <= c[++B]) break;
  1091.                                         f -= c[B]
  1092.                                     }
  1093.                                 }
  1094.                                 if (w + j > m && w < m) j = m - w;
  1095.                                 z = 1 << j;
  1096.                                 t[1 + h] = j;
  1097.                                 q = new Array(z);
  1098.                                 for (o = 0; o < z; o++) {
  1099.                                     q[o] = new dl()
  1100.                                 }
  1101.                                 if (C == null) C = this.root = new dk();
  1102.                                 else C = C.next = new dk();
  1103.                                 C.next = null;
  1104.                                 C.list = q;
  1105.                                 u[h] = q;
  1106.                                 if (h > 0) {
  1107.                                     x[h] = i;
  1108.                                     r.b = t[h];
  1109.                                     r.e = 16 + j;
  1110.                                     r.t = q;
  1111.                                     j = (i & ((1 << w) - 1)) >> (w - t[h]);
  1112.                                     u[h - 1][j].e = r.e;
  1113.                                     u[h - 1][j].b = r.b;
  1114.                                     u[h - 1][j].n = r.n;
  1115.                                     u[h - 1][j].t = r.t
  1116.                                 }
  1117.                             }
  1118.                             r.b = k - w;
  1119.                             if (A >= n) r.e = 99;
  1120.                             else if (p[A] < s) {
  1121.                                 r.e = (p[A] < 256 ? 16 : 15);
  1122.                                 r.n = p[A++]
  1123.                             } else {
  1124.                                 r.e = e[p[A] - s];
  1125.                                 r.n = d[p[A++] - s]
  1126.                             }
  1127.                             f = 1 << (k - w);
  1128.                             for (j = i >> w; j < z; j += f) {
  1129.                                 q[j].e = r.e;
  1130.                                 q[j].b = r.b;
  1131.                                 q[j].n = r.n;
  1132.                                 q[j].t = r.t
  1133.                             }
  1134.                             for (j = 1 << (k - 1);
  1135.                             (i & j) != 0; j >>= 1) i ^= j;
  1136.                             i ^= j;
  1137.                             while ((i & ((1 << w) - 1)) != x[h]) {
  1138.                                 w -= t[h];
  1139.                                 h--
  1140.                             }
  1141.                         }
  1142.                     }
  1143.                     this.m = t[1];
  1144.                     this.status = ((y != 0 && g != 1) ? 1 : 0)
  1145.                 }
  1146.             };
  1147.         var dn = function () {
  1148.                 if (Y.length == Z) return -1;
  1149.                 return Y[Z++]
  1150.             };
  1151.         var dp = function (n) {
  1152.                 while (R < n) {
  1153.                     Q |= dn() << R;
  1154.                     R += 8
  1155.                 }
  1156.             };
  1157.         var dq = function (n) {
  1158.                 return Q & de[n]
  1159.             };
  1160.         var dr = function (n) {
  1161.                 Q >>= n;
  1162.                 R -= n
  1163.             };
  1164.         var ds = function (a, b, c) {
  1165.                 var e;
  1166.                 var t;
  1167.                 var n;
  1168.                 if (c == 0) return 0;
  1169.                 n = 0;
  1170.                 for (;;) {
  1171.                     dp(X);
  1172.                     t = W.list[dq(X)];
  1173.                     e = t.e;
  1174.                     while (e > 16) {
  1175.                         if (e == 99) return -1;
  1176.                         dr(t.b);
  1177.                         e -= 16;
  1178.                         dp(e);
  1179.                         t = t.t[dq(e)];
  1180.                         e = t.e
  1181.                     }
  1182.                     dr(t.b);
  1183.                     if (e == 16) {
  1184.                         M &= D - 1;
  1185.                         a[b + n++] = L[M++] = t.n;
  1186.                         if (n == c) return c;
  1187.                         continue
  1188.                     }
  1189.                     if (e == 15) break;
  1190.                     dp(e);
  1191.                     U = t.n + dq(e);
  1192.                     dr(e);
  1193.                     dp(zip_bd);
  1194.                     t = zip_td.list[dq(zip_bd)];
  1195.                     e = t.e;
  1196.                     while (e > 16) {
  1197.                         if (e == 99) return -1;
  1198.                         dr(t.b);
  1199.                         e -= 16;
  1200.                         dp(e);
  1201.                         t = t.t[dq(e)];
  1202.                         e = t.e
  1203.                     }
  1204.                     dr(t.b);
  1205.                     dp(e);
  1206.                     V = M - t.n - dq(e);
  1207.                     dr(e);
  1208.                     while (U > 0 && n < c) {
  1209.                         U--;
  1210.                         V &= D - 1;
  1211.                         M &= D - 1;
  1212.                         a[b + n++] = L[M++] = L[V++]
  1213.                     }
  1214.                     if (n == c) return c
  1215.                 }
  1216.                 S = -1;
  1217.                 return n
  1218.             };
  1219.         var dt = function (a, b, c) {
  1220.                 var n;
  1221.                 n = R & 7;
  1222.                 dr(n);
  1223.                 dp(16);
  1224.                 n = dq(16);
  1225.                 dr(16);
  1226.                 dp(16);
  1227.                 if (n != ((~Q) & 0xffff)) return -1;
  1228.                 dr(16);
  1229.                 U = n;
  1230.                 n = 0;
  1231.                 while (U > 0 && n < c) {
  1232.                     U--;
  1233.                     M &= D - 1;
  1234.                     dp(8);
  1235.                     a[b + n++] = L[M++] = dq(8);
  1236.                     dr(8)
  1237.                 }
  1238.                 if (U == 0) S = -1;
  1239.                 return n
  1240.             };
  1241.         var du = function (a, b, c) {
  1242.                 if (N == null) {
  1243.                     var i;
  1244.                     var l = new Array(288);
  1245.                     var h;
  1246.                     for (i = 0; i < 144; i++) l[i] = 8;
  1247.                     for (; i < 256; i++) l[i] = 9;
  1248.                     for (; i < 280; i++) l[i] = 7;
  1249.                     for (; i < 288; i++) l[i] = 8;
  1250.                     P = 7;
  1251.                     h = new dm(l, 288, 257, df, dg, P);
  1252.                     if (h.status != 0) {
  1253.                         alert("HufBuild error: " + h.status);
  1254.                         return -1
  1255.                     }
  1256.                     N = h.root;
  1257.                     P = h.m;
  1258.                     for (i = 0; i < 30; i++) l[i] = 5;
  1259.                     var d = 5;
  1260.                     h = new dm(l, 30, 0, dh, di, d);
  1261.                     if (h.status > 1) {
  1262.                         N = null;
  1263.                         alert("HufBuild error: " + h.status);
  1264.                         return -1
  1265.                     }
  1266.                     O = h.root;
  1267.                     d = h.m
  1268.                 }
  1269.                 W = N;
  1270.                 zip_td = O;
  1271.                 X = P;
  1272.                 zip_bd = d;
  1273.                 return ds(a, b, c)
  1274.             };
  1275.         var dv = function (a, b, c) {
  1276.                 var i;
  1277.                 var j;
  1278.                 var l;
  1279.                 var n;
  1280.                 var t;
  1281.                 var d;
  1282.                 var e;
  1283.                 var f;
  1284.                 var g = new Array(286 + 30);
  1285.                 var h;
  1286.                 for (i = 0; i < g.length; i++) g[i] = 0;
  1287.                 dp(5);
  1288.                 e = 257 + dq(5);
  1289.                 dr(5);
  1290.                 dp(5);
  1291.                 f = 1 + dq(5);
  1292.                 dr(5);
  1293.                 dp(4);
  1294.                 d = 4 + dq(4);
  1295.                 dr(4);
  1296.                 if (e > 286 || f > 30) return -1;
  1297.                 for (j = 0; j < d; j++) {
  1298.                     dp(3);
  1299.                     g[dj[j]] = dq(3);
  1300.                     dr(3)
  1301.                 }
  1302.                 for (; j < 19; j++) g[dj[j]] = 0;
  1303.                 X = 7;
  1304.                 h = new dm(g, 19, 19, null, null, X);
  1305.                 if (h.status != 0) return -1;
  1306.                 W = h.root;
  1307.                 X = h.m;
  1308.                 n = e + f;
  1309.                 i = l = 0;
  1310.                 while (i < n) {
  1311.                     dp(X);
  1312.                     t = W.list[dq(X)];
  1313.                     j = t.b;
  1314.                     dr(j);
  1315.                     j = t.n;
  1316.                     if (j < 16) g[i++] = l = j;
  1317.                     else if (j == 16) {
  1318.                         dp(2);
  1319.                         j = 3 + dq(2);
  1320.                         dr(2);
  1321.                         if (i + j > n) return -1;
  1322.                         while (j-- > 0) g[i++] = l
  1323.                     } else if (j == 17) {
  1324.                         dp(3);
  1325.                         j = 3 + dq(3);
  1326.                         dr(3);
  1327.                         if (i + j > n) return -1;
  1328.                         while (j-- > 0) g[i++] = 0;
  1329.                         l = 0
  1330.                     } else {
  1331.                         dp(7);
  1332.                         j = 11 + dq(7);
  1333.                         dr(7);
  1334.                         if (i + j > n) return -1;
  1335.                         while (j-- > 0) g[i++] = 0;
  1336.                         l = 0
  1337.                     }
  1338.                 }
  1339.                 X = H;
  1340.                 h = new dm(g, e, 257, df, dg, X);
  1341.                 if (X == 0) h.status = 1;
  1342.                 if (h.status != 0) {
  1343.                     if (h.status == 1);
  1344.                     return -1
  1345.                 }
  1346.                 W = h.root;
  1347.                 X = h.m;
  1348.                 for (i = 0; i < f; i++) g[i] = g[i + e];
  1349.                 zip_bd = I;
  1350.                 h = new dm(g, f, 0, dh, di, zip_bd);
  1351.                 zip_td = h.root;
  1352.                 zip_bd = h.m;
  1353.                 if (zip_bd == 0 && e > 257) {
  1354.                     return -1
  1355.                 }
  1356.                 if (h.status == 1) {}
  1357.                 if (h.status != 0) return -1;
  1358.                 return ds(a, b, c)
  1359.             };
  1360.         var dw = function () {
  1361.                 var i;
  1362.                 if (L == null) L = new Array(2 * D);
  1363.                 M = 0;
  1364.                 Q = 0;
  1365.                 R = 0;
  1366.                 S = -1;
  1367.                 T = false;
  1368.                 U = V = 0;
  1369.                 W = null
  1370.             };
  1371.         var dx = function (a, b, c) {
  1372.                 var n, i;
  1373.                 n = 0;
  1374.                 while (n < c) {
  1375.                     if (T && S == -1) return n;
  1376.                     if (U > 0) {
  1377.                         if (S != E) {
  1378.                             while (U > 0 && n < c) {
  1379.                                 U--;
  1380.                                 V &= D - 1;
  1381.                                 M &= D - 1;
  1382.                                 a[b + n++] = L[M++] = L[V++]
  1383.                             }
  1384.                         } else {
  1385.                             while (U > 0 && n < c) {
  1386.                                 U--;
  1387.                                 M &= D - 1;
  1388.                                 dp(8);
  1389.                                 a[b + n++] = L[M++] = dq(8);
  1390.                                 dr(8)
  1391.                             }
  1392.                             if (U == 0) S = -1
  1393.                         }
  1394.                         if (n == c) return n
  1395.                     }
  1396.                     if (S == -1) {
  1397.                         if (T) break;
  1398.                         dp(1);
  1399.                         if (dq(1) != 0) T = true;
  1400.                         dr(1);
  1401.                         dp(2);
  1402.                         S = dq(2);
  1403.                         dr(2);
  1404.                         W = null;
  1405.                         U = 0
  1406.                     }
  1407.                     switch (S) {
  1408.                     case 0:
  1409.                         i = dt(a, b + n, c - n);
  1410.                         break;
  1411.                     case 1:
  1412.                         if (W != null) i = ds(a, b + n, c - n);
  1413.                         else i = du(a, b + n, c - n);
  1414.                         break;
  1415.                     case 2:
  1416.                         if (W != null) i = ds(a, b + n, c - n);
  1417.                         else i = dv(a, b + n, c - n);
  1418.                         break;
  1419.                     default:
  1420.                         i = -1;
  1421.                         break
  1422.                     }
  1423.                     if (i == -1) {
  1424.                         if (T) return 0;
  1425.                         return -1
  1426.                     }
  1427.                     n += i
  1428.                 }
  1429.                 return n
  1430.             };
  1431.         var dy = function (a) {
  1432.                 var i, j;
  1433.                 dw();
  1434.                 Y = a;
  1435.                 Z = 0;
  1436.                 var b = [0];
  1437.                 var c = [];
  1438.                 while ((i = dx(b, 0, b.length)) > 0) {
  1439.                     c.push(b[0])
  1440.                 }
  1441.                 Y = null;
  1442.                 return c
  1443.             };
  1444.         return dy
  1445.     })();
  1446.     var fj = function (c) {
  1447.             var a = 1,
  1448.                 b = 0;
  1449.             var i;
  1450.             var d = c.length;
  1451.             var e = 65521;
  1452.             for (i = 0; i < d; i += 1) {
  1453.                 a = (a + c[i]) % e;
  1454.                 b = (b + a) % e
  1455.             }
  1456.             return (b << 16) | a
  1457.         };
  1458.     var fk = function (a, b) {
  1459.             var i;
  1460.             var c = fj(a);
  1461.             var d = dd(a, b);
  1462.             a = d;
  1463.             a.unshift(0x78, 0xDA);
  1464.             for (i = 0; i < 4; ++i) a.push(c >> i * 8 & 25);
  1465.             return a
  1466.         };
  1467.     var fl = function (a) {
  1468.             if (a.length < 6) {
  1469.                 throw "DataError: Not enough input";
  1470.             }
  1471.             var b = fi(a.slice(2, a.length - 4));
  1472.             if (a.length > 6 && b.length === 0) {
  1473.                 throw "DataError: Unable to inflate the data";
  1474.             }
  1475.             return b
  1476.         };
  1477.     return {
  1478.         'deflate': dd,
  1479.         'inflate': fi,
  1480.         'compress': fk,
  1481.         'uncompress': fl
  1482.     }
  1483. })();
  1484. var char = 0,
  1485.     short = 0,
  1486.     int = 0,
  1487.     long = 0,
  1488.     void_ = 0;
  1489. var int8_t = char;
  1490. var uint8_t = char;
  1491. var int16_t = short;
  1492. var uint16_t = short;
  1493. var int32_t = int;
  1494. var uint32_t = int;
  1495. var uint64_t = long;
  1496. var int64_t = long;
  1497. var float = 0.00;
  1498. var size_t = 0;
  1499. var double = 0;
  1500. var score_t = int64_t;
  1501.  
  1502. function cloneObjAttr(a) {
  1503.     if (a instanceof Array) {
  1504.         return a
  1505.     }
  1506.     if (a instanceof Object) {
  1507.         var b = {};
  1508.         for (var c in a) {
  1509.             if (a.hasOwnProperty(c) && !(a instanceof Array)) b[c] = (a[c])
  1510.         }
  1511.         return b
  1512.     }
  1513.     throw new alert("Unable to copy obj! Its type isn't supported.");
  1514. }
  1515. function newObjectIt(a) {
  1516.     return JSON.parse(JSON.stringify(a))
  1517. }
  1518. function convertBinaryToArray(a) {
  1519.     var b = new Array();
  1520.     var c = a.length;
  1521.     for (i = 0; i < c; ++i) b.push(a.charCodeAt(i));
  1522.     return b
  1523. }
  1524. function int64BitLeft(a, b) {
  1525.     var c = new Array();
  1526.     var i;
  1527.     for (i = 0; i < b; ++i) c[i] = '0';
  1528.     bits = (a.toString(2) + '' + c.join(""));
  1529.     return parseInt(bits, 2)
  1530. }
  1531. function write32BitIn4Bytes(a, b, c) {
  1532.     var i;
  1533.     for (i = 3; i >= 0; --i) a[b + (3 - i)] = (c >> (8 * i)) & 0xff
  1534. }
  1535. function write4BytesIn32Bit(a, b) {
  1536.     return ((a[b + 0] << 24) | (a[b + 1] << 16) | (a[b + 2] << 8) | a[b + 3])
  1537. }
  1538. function alert32BitIn4Bytes(a) {
  1539.     var i, str = '';
  1540.     for (i = 3; i >= 0; --i) str += ' ' + ((a >> (8 * i)) & 0xff);
  1541.     alert(str)
  1542. }
  1543. function Byte2Hex(a) {
  1544.     return '0x' + a.toString(16)
  1545. }
  1546. function memcpy(a, b, c, d, e) {
  1547.     if (typeof a != 'string') {
  1548.         for (i = 0; i < e; ++i) a[b + i] = c[d + i]
  1549.     } else {
  1550.         if (b > 0) alert('string offset is over 0');
  1551.         a = c.slice(d, e);
  1552.         return a
  1553.     }
  1554. }
  1555. function memcpy2(a, b, c, d, e) {
  1556.     var f = c.slice(0, d);
  1557.     var g = c.slice(d, d + e);
  1558.     var h = c.slice(d + e);
  1559.     a.splice(0);
  1560.     a.concat(f, g, h)
  1561. }
  1562. function memcpyArrM(b, c, d, e, f) {
  1563.     for (i = 0; i < f; ++i) {
  1564.         var g = b[c + i].length;
  1565.         for (var a = 0; a < g; ++a) b[c + i][a] = d[e + i][a]
  1566.     }
  1567. }
  1568. function ArrCopy(a) {
  1569.     var b = new Array();
  1570.     var c = a.length;
  1571.     for (i = 0; i < c; ++i) {
  1572.         b.push(a[i])
  1573.     }
  1574.     return b
  1575. }
  1576. function memset_wl(a, b) {
  1577.     var c = new Array();
  1578.     c.push(newObjectIt(a));
  1579.     for (i = 0; i < b; ++i) c.push(newObjectIt(a));
  1580.     c.push(0);
  1581.     return c
  1582. }
  1583. function memset(a, b) {
  1584.     var c = new Array();
  1585.     for (i = 0; i < b; ++i) c.push(a);
  1586.     c.push(0);
  1587.     return c
  1588. }
  1589. function membuild_wl(a, b) {
  1590.     var c = new Array();
  1591.     c.push(newObjectIt(a));
  1592.     for (i = 0; i < b; ++i) c.push(newObjectIt(a));
  1593.     c.push(0);
  1594.     return c
  1595. }
  1596. function membuild(a, b) {
  1597.     var c = new Array();
  1598.     for (i = 0; i < b; ++i) c.push(a);
  1599.     c.push(0);
  1600.     return c
  1601. }
  1602. function memset_(a, b, c, d) {
  1603.     for (i = 0; i < d; ++i) a[b + i] = c
  1604. }
  1605. function malloc(a, b) {
  1606.     var c = new Array();
  1607.     for (i = 0; i < a; ++i) c.push(b);
  1608.     c.push(0);
  1609.     return c
  1610. }
  1611. function mallocStr(a, b) {
  1612.     var c = new Array();
  1613.     for (i = 0; i < a; ++i) c.push(' ');
  1614.     return c.join("")
  1615. }
  1616. function sizeof(a) {
  1617.     return 1
  1618. }
  1619. function memcmp(a, b, s, c) {
  1620.     var w = '';
  1621.     for (i = 0; i < c; ++i) w += String.fromCharCode(a[b + i]);
  1622.     if (s == w) return 0;
  1623.     else return 1
  1624. }
  1625. function Arr(a, b) {
  1626.     var c = new Array();
  1627.     for (i = 0; i < a; ++i) c.push(b);
  1628.     return c
  1629. }
  1630. function Arr_nOI(a, b) {
  1631.     var c = new Array();
  1632.     for (i = 0; i < a; ++i) c.push(newObjectIt(b));
  1633.     return c
  1634. }
  1635. function ArrM(b, c) {
  1636.     var d, resStr = new Array();
  1637.     for (a = (b.length - 1); a >= 0; --a) c = newObjectIt(Arr(b[a], c));
  1638.     return c
  1639. }
  1640. function assert(a) {
  1641.     if (!a) {
  1642.         throw new Error('assert :P');
  1643.     }
  1644. }
  1645. function WebPDecoder() {
  1646.     var N = 0x0002;
  1647.     var O = 0,
  1648.         MODE_RGBA = 1,
  1649.         MODE_BGR = 2,
  1650.         MODE_BGRA = 3,
  1651.         MODE_ARGB = 4,
  1652.         MODE_RGBA_4444 = 5,
  1653.         MODE_RGB_565 = 6,
  1654.         MODE_YUV = 7,
  1655.         MODE_YUVA = 8,
  1656.         MODE_LAST = 9;
  1657.     this.WEBP_CSP_MODE = {
  1658.         MODE_RGB: 0,
  1659.         MODE_RGBA: 1,
  1660.         MODE_BGR: 2,
  1661.         MODE_BGRA: 3,
  1662.         MODE_ARGB: 4,
  1663.         MODE_RGBA_4444: 5,
  1664.         MODE_RGB_565: 6,
  1665.         MODE_YUV: 7,
  1666.         MODE_YUVA: 8,
  1667.         MODE_LAST: 9
  1668.     };
  1669.     var P = {
  1670.         rgba: uint8_t,
  1671.         rgba_off: 0,
  1672.         stride: int,
  1673.         size: int
  1674.     };
  1675.     var Q = {
  1676.         y: uint8_t,
  1677.         u: uint8_t,
  1678.         v: uint8_t,
  1679.         a: uint8_t,
  1680.         y_off: uint8_t,
  1681.         u_off: uint8_t,
  1682.         v_off: uint8_t,
  1683.         a_off: uint8_t,
  1684.         y_stride: int,
  1685.         u_stride: int,
  1686.         v_stride: int,
  1687.         a_stride: int,
  1688.         y_size: int,
  1689.         u_size: int,
  1690.         v_size: int,
  1691.         a_size: int
  1692.     };
  1693.     var R = {
  1694.         colorspace: 'WEBP_CSP_MODE',
  1695.         width: int,
  1696.         height: int,
  1697.         is_external_memory: int,
  1698.         u: {
  1699.             RGBA: P,
  1700.             YUVA: Q
  1701.         },
  1702.         private_memory: null,
  1703.         private_memory_off: uint8_t
  1704.     };
  1705.  
  1706.     function WebPInitDecBuffer(a) {
  1707.         return WebPInitDecBufferInternal(a, N)
  1708.     }
  1709.     var T = 0,
  1710.         VP8_STATUS_OUT_OF_MEMORY = 1,
  1711.         VP8_STATUS_INVALID_PARAM = 2,
  1712.         VP8_STATUS_BITSTREAM_ERROR = 3,
  1713.         VP8_STATUS_UNSUPPORTED_FEATURE = 4,
  1714.         VP8_STATUS_SUSPENDED = 5,
  1715.         VP8_STATUS_USER_ABORT = 6,
  1716.         VP8_STATUS_NOT_ENOUGH_DATA = 7;
  1717.     this.VP8StatusCode = {
  1718.         VP8_STATUS_OK: 0,
  1719.         VP8_STATUS_OUT_OF_MEMORY: 1,
  1720.         VP8_STATUS_INVALID_PARAM: 2,
  1721.         VP8_STATUS_BITSTREAM_ERROR: 3,
  1722.         VP8_STATUS_UNSUPPORTED_FEATURE: 4,
  1723.         VP8_STATUS_SUSPENDED: 5,
  1724.         VP8_STATUS_USER_ABORT: 6,
  1725.         VP8_STATUS_NOT_ENOUGH_DATA: 7
  1726.     };
  1727.     var U = {
  1728.         width: {
  1729.             value: int
  1730.         },
  1731.         height: {
  1732.             value: int
  1733.         },
  1734.         has_alpha: {
  1735.             value: int
  1736.         },
  1737.         no_incremental_decoding: int,
  1738.         rotate: int,
  1739.         uv_sampling: int,
  1740.         bitstream_version: int
  1741.     };
  1742.     this.WebPGetFeatures = function (a, b, c) {
  1743.         return WebPGetFeaturesInternal(a, b, c, N)
  1744.     };
  1745.     var V = {
  1746.         bypass_filtering: int,
  1747.         no_fancy_upsampling: int,
  1748.         use_cropping: int,
  1749.         crop_left: int,
  1750.         crop_top: int,
  1751.         crop_width: int,
  1752.         crop_height: int,
  1753.         use_scaling: int,
  1754.         scaled_width: int,
  1755.         scaled_height: int,
  1756.         force_rotation: int,
  1757.         no_enhancement: int,
  1758.         use_threads: int
  1759.     };
  1760.     this.WebPDecoderConfig = {
  1761.         input: newObjectIt(U),
  1762.         output: newObjectIt(R),
  1763.         options: newObjectIt(V)
  1764.     };
  1765.     this.WebPInitDecoderConfig = function (a) {
  1766.         return WebPInitDecoderConfigInternal(a, N)
  1767.     };
  1768.     var Y = {
  1769.         width: int,
  1770.         height: int,
  1771.         mb_y: int,
  1772.         mb_w: int,
  1773.         mb_h: int,
  1774.         y: uint8_t,
  1775.         u: uint8_t,
  1776.         v: uint8_t,
  1777.         y_off: 0,
  1778.         u_off: 0,
  1779.         v_off: 0,
  1780.         y_stride: int,
  1781.         uv_stride: int,
  1782.         opaque: void_,
  1783.         put: 0,
  1784.         setup: 0,
  1785.         teardown: 0,
  1786.         fancy_upsampling: int,
  1787.         data_size: uint32_t,
  1788.         data: uint8_t,
  1789.         data_off: 0,
  1790.         bypass_filtering: int,
  1791.         use_cropping: int,
  1792.         crop_left: int,
  1793.         crop_right: int,
  1794.         crop_top: int,
  1795.         crop_bottom: int,
  1796.         use_scaling: int,
  1797.         scaled_width: int,
  1798.         scaled_height: int,
  1799.         a: uint8_t,
  1800.         a_off: 0
  1801.     };
  1802.  
  1803.     function VP8InitIo(a) {
  1804.         return VP8InitIoInternal(a, N)
  1805.     };
  1806.     var Z = {
  1807.         x_expand: int,
  1808.         fy_scale: int,
  1809.         fx_scale: int,
  1810.         fxy_scale: int64_t,
  1811.         y_accum: int,
  1812.         y_add: int,
  1813.         y_sub: int,
  1814.         x_add: int,
  1815.         x_sub: int,
  1816.         src_width: int,
  1817.         src_height: int,
  1818.         dst_width: int,
  1819.         dst_height: int,
  1820.         dst: uint8_t,
  1821.         dst_off: 0,
  1822.         dst_stride: int,
  1823.         irow: int32_t,
  1824.         irow_off: 0,
  1825.         frow: int32_t,
  1826.         frow_off: 0
  1827.     };
  1828.     var ba = {
  1829.         output: newObjectIt(R),
  1830.         tmp_y: uint8_t,
  1831.         tmp_u: uint8_t,
  1832.         tmp_v: uint8_t,
  1833.         tmp_y_off: 0,
  1834.         tmp_u_off: 0,
  1835.         tmp_v_off: 0,
  1836.         last_y: int,
  1837.         options_: newObjectIt(V),
  1838.         scaler_y: newObjectIt(Z),
  1839.         scaler_u: newObjectIt(Z),
  1840.         scaler_v: newObjectIt(Z),
  1841.         scaler_a: newObjectIt(Z),
  1842.         memory: void_,
  1843.         emit: '(OutputFunc)',
  1844.         emit_alpha: '(OutputFunc)'
  1845.     };
  1846.     var bb = {
  1847.         buf_: uint8_t,
  1848.         buf_off: null,
  1849.         buf_end_: uint8_t,
  1850.         eof_: int,
  1851.         range_: uint32_t,
  1852.         value_: uint32_t,
  1853.         missing_: int
  1854.     };
  1855.  
  1856.     function VP8Get(a) {
  1857.         return VP8GetValue(a, 1)
  1858.     };
  1859.  
  1860.     function VP8GetByte(a) {
  1861.         assert(a);
  1862.         if (a.buf_off < a.buf_end_) {
  1863.             assert(a.buf_);
  1864.             return (a.buf_[a.buf_off++])
  1865.         }
  1866.         a.eof_ = 1;
  1867.         return 0xff
  1868.     }
  1869.     function VP8BitUpdate(a, b) {
  1870.         var c = uint32_t;
  1871.         var d = (b + 1) << 8;
  1872.         if (a.missing_ > 0) {
  1873.             a.value_ |= VP8GetByte(a) << a.missing_;
  1874.             a.missing_ -= 8
  1875.         }
  1876.         c = (a.value_ >= d) + 0;
  1877.         if (c) {
  1878.             a.range_ -= b + 1;
  1879.             a.value_ -= d
  1880.         } else {
  1881.             a.range_ = b
  1882.         }
  1883.         return c
  1884.     }
  1885.     function VP8Shift(a) {
  1886.         var b = bc[a.range_];
  1887.         a.range_ = bd[a.range_];
  1888.         a.value_ <<= b;
  1889.         a.missing_ += b
  1890.     };
  1891.  
  1892.     function VP8GetBit(a, b) {
  1893.         var c = (a.range_ * b) >> 8;
  1894.         var d = VP8BitUpdate(a, c);
  1895.         if (a.range_ < 0x7f) {
  1896.             VP8Shift(a)
  1897.         }
  1898.         return d
  1899.     };
  1900.  
  1901.     function VP8GetSigned(a, v) {
  1902.         var b = a.range_ >> 1;
  1903.         var c = VP8BitUpdate(a, b);
  1904.         VP8Shift(a);
  1905.         return c ? -v : v
  1906.     };
  1907.  
  1908.     function VP8InitBitReader(a, b, c, d) {
  1909.         assert(a);
  1910.         assert(b);
  1911.         assert(d);
  1912.         a.range_ = 255 - 1;
  1913.         a.buf_ = b;
  1914.         a.buf_off = c;
  1915.         a.buf_end_ = d;
  1916.         a.value_ = 0;
  1917.         a.missing_ = 8;
  1918.         a.eof_ = 0
  1919.     };
  1920.     var bc = new Array(7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0);
  1921.     var bd = new Array(127, 127, 191, 127, 159, 191, 223, 127, 143, 159, 175, 191, 207, 223, 239, 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, 247, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 127);
  1922.  
  1923.     function VP8GetValue(a, b) {
  1924.         var v = 0;
  1925.         while (b-- > 0) {
  1926.             v |= VP8GetBit(a, 0x80) << b
  1927.         }
  1928.         return v
  1929.     };
  1930.  
  1931.     function VP8GetSignedValue(a, b) {
  1932.         var c = VP8GetValue(a, b);
  1933.         return VP8Get(a) ? -c : c
  1934.     };
  1935.     var be = 0;
  1936.     var bf = 1;
  1937.     var bg = 2;
  1938.     var bh = 0,
  1939.         B_TM_PRED = 1,
  1940.         B_VE_PRED = 2,
  1941.         B_HE_PRED = 3,
  1942.         B_RD_PRED = 4,
  1943.         B_VR_PRED = 5,
  1944.         B_LD_PRED = 6,
  1945.         B_VL_PRED = 7,
  1946.         B_HD_PRED = 8,
  1947.         B_HU_PRED = 9,
  1948.         NUM_BMODES = B_HU_PRED + 1 - bh,
  1949.         DC_PRED = bh,
  1950.         V_PRED = B_VE_PRED,
  1951.         H_PRED = B_HE_PRED,
  1952.         TM_PRED = B_TM_PRED,
  1953.         B_PRED = NUM_BMODES,
  1954.         B_DC_PRED_NOTOP = 4,
  1955.         B_DC_PRED_NOLEFT = 5,
  1956.         B_DC_PRED_NOTOPLEFT = 6,
  1957.         NUM_B_DC_MODES = 7;
  1958.     var bi = 3,
  1959.         NUM_MB_SEGMENTS = 4,
  1960.         NUM_REF_LF_DELTAS = 4,
  1961.         NUM_MODE_LF_DELTAS = 4,
  1962.         MAX_NUM_PARTITIONS = 8,
  1963.         NUM_TYPES = 4,
  1964.         NUM_BANDS = 8,
  1965.         NUM_CTX = 3,
  1966.         NUM_PROBAS = 11,
  1967.         NUM_MV_PROBAS = 19;
  1968.     var bj = 32;
  1969.     var bk = (bj * 17 + bj * 9);
  1970.     var bl = (bj * 17);
  1971.     var bm = (bj * 1 + 8);
  1972.     var bn = (bm + bj * 16 + bj);
  1973.     var bo = (bn + 16);
  1974.     var bp = {
  1975.         key_frame_: uint8_t,
  1976.         profile_: uint8_t,
  1977.         show_: uint8_t,
  1978.         partition_length_: uint32_t
  1979.     };
  1980.     var bq = {
  1981.         width_: uint16_t,
  1982.         height_: uint16_t,
  1983.         xscale_: uint8_t,
  1984.         yscale_: uint8_t,
  1985.         colorspace_: uint8_t,
  1986.         clamp_type_: uint8_t
  1987.     };
  1988.     var bs = {
  1989.         use_segment_: int,
  1990.         update_map_: int,
  1991.         absolute_delta_: int,
  1992.         quantizer_: Arr(NUM_MB_SEGMENTS, int8_t),
  1993.         filter_strength_: Arr(NUM_MB_SEGMENTS, int8_t)
  1994.     };
  1995.     var bt = {
  1996.         segments_: Arr(bi, uint8_t),
  1997.         coeffs_: ArrM(new Array(NUM_TYPES, NUM_BANDS, NUM_CTX, NUM_PROBAS), uint8_t)
  1998.     };
  1999.     var bu = {
  2000.         simple_: int,
  2001.         level_: int,
  2002.         sharpness_: int,
  2003.         use_lf_delta_: int,
  2004.         ref_lf_delta_: Arr(NUM_REF_LF_DELTAS, int),
  2005.         mode_lf_delta_: Arr(NUM_REF_LF_DELTAS, int)
  2006.     };
  2007.     var bv = {
  2008.         f_level_: int,
  2009.         f_ilevel_: int,
  2010.         f_inner_: int
  2011.     };
  2012.     var bw = {
  2013.         nz_: int,
  2014.         dc_nz_: int,
  2015.         skip_: int
  2016.     };
  2017.     var bx = {
  2018.         y1_mat_: Arr(2, uint16_t),
  2019.         y2_mat_: Arr(2, uint16_t),
  2020.         uv_mat_: Arr(2, uint16_t)
  2021.     };
  2022.     var by = {
  2023.         id_: int,
  2024.         mb_y_: int,
  2025.         filter_row_: int,
  2026.         f_info_: bv,
  2027.         io_: Y
  2028.     };
  2029.     var bz = {
  2030.         status_: 'VP8StatusCode',
  2031.         ready_: int,
  2032.         error_msg_: char,
  2033.         br_: newObjectIt(bb),
  2034.         frm_hdr_: newObjectIt(bp),
  2035.         pic_hdr_: newObjectIt(bq),
  2036.         filter_hdr_: newObjectIt(bu),
  2037.         segment_hdr_: newObjectIt(bs),
  2038.         worker_: 'WebPWorker',
  2039.         use_threads_: int,
  2040.         cache_id_: int,
  2041.         num_caches_: int,
  2042.         thread_ctx_: by,
  2043.         mb_w_: int,
  2044.         mb_h_: int,
  2045.         tl_mb_x_: int,
  2046.         tl_mb_y_: int,
  2047.         br_mb_x_: int,
  2048.         br_mb_y_: int,
  2049.         num_parts_: int,
  2050.         parts_: Arr_nOI(MAX_NUM_PARTITIONS, bb),
  2051.         buffer_flags_: uint32_t,
  2052.         dqm_: Arr_nOI(NUM_MB_SEGMENTS, bx),
  2053.         proba_: newObjectIt(bt),
  2054.         use_skip_proba_: int,
  2055.         skip_p_: uint8_t,
  2056.         intra_t_: uint8_t,
  2057.         intra_l_: Arr(4, uint8_t),
  2058.         y_t_: uint8_t,
  2059.         u_t_: uint8_t,
  2060.         v_t_: uint8_t,
  2061.         mb_info_: newObjectIt(bw),
  2062.         f_info_: newObjectIt(bv),
  2063.         yuv_b_: uint8_t,
  2064.         coeffs_: int16_t,
  2065.         cache_y_: uint8_t,
  2066.         cache_u_: uint8_t,
  2067.         cache_v_: uint8_t,
  2068.         cache_y_off: int,
  2069.         cache_u_off: int,
  2070.         cache_v_off: int,
  2071.         cache_y_stride_: int,
  2072.         cache_uv_stride_: int,
  2073.         mem_: void_,
  2074.         mem_size_: int,
  2075.         mb_x_: int,
  2076.         mb_y_: int,
  2077.         is_i4x4_: uint8_t,
  2078.         imodes_: Arr(16, uint8_t),
  2079.         imodes_offset_: 0,
  2080.         uvmode_: uint8_t,
  2081.         segment_: uint8_t,
  2082.         non_zero_: uint32_t,
  2083.         non_zero_ac_: uint32_t,
  2084.         filter_type_: int,
  2085.         filter_row_: int,
  2086.         filter_levels_: Arr(NUM_MB_SEGMENTS, uint8_t),
  2087.         alpha_data_: uint8_t,
  2088.         alpha_data_off: 0,
  2089.         alpha_data_size_: size_t,
  2090.         alpha_plane_: uint8_t,
  2091.         alpha_plane_off: 0,
  2092.         layer_colorspace_: int,
  2093.         layer_data_: uint8_t,
  2094.         layer_data_off: 0,
  2095.         layer_data_size_: size_t
  2096.     };
  2097.  
  2098.     function VP8DecompressAlphaRows(a, b, c) {
  2099.         var d = a.alpha_plane_;
  2100.         var e = a.pic_hdr_.width_;
  2101.         if (b < 0 || b + c > a.pic_hdr_.height_) {
  2102.             return null
  2103.         }
  2104.         if (b == 0) {
  2105.             var f = a.alpha_data_;
  2106.             var g = a.alpha_data_off;
  2107.             var h = a.alpha_data_size_;
  2108.             var i = e * a.pic_hdr_.height_;
  2109.             d = WebPZlib.uncompress(f.slice(g, g + h))
  2110.         }
  2111.         return (b == 0 ? d : (+b * e))
  2112.     }
  2113.     var bA = new Array(3, 4, 3, 4, 4, 2, 2, 1, 1);
  2114.  
  2115.     function CheckDecBuffer(a) {
  2116.         var b = 1;
  2117.         var c = a.colorspace;
  2118.         var d = a.width;
  2119.         var e = a.height;
  2120.         if (c >= MODE_YUV) {
  2121.             var f = a.u.YUVA;
  2122.             var g = f.y_stride * e;
  2123.             var h = f.u_stride * parseInt((e + 1) / 2);
  2124.             var i = f.v_stride * parseInt((e + 1) / 2);
  2125.             var j = f.a_stride * e;
  2126.             b &= (g <= f.y_size);
  2127.             b &= (h <= f.u_size);
  2128.             b &= (i <= f.v_size);
  2129.             b &= (j <= f.a_size);
  2130.             b &= (f.y_stride >= d);
  2131.             b &= (f.u_stride >= parseInt(d + 1) / 2);
  2132.             b &= (f.v_stride >= parseInt(d + 1) / 2);
  2133.             if (f.a) {
  2134.                 b &= (f.a_stride >= d)
  2135.             }
  2136.         } else {
  2137.             var f = a.u.RGBA;
  2138.             b &= (f.stride * e <= f.size);
  2139.             b &= (f.stride >= d * bA[c])
  2140.         }
  2141.         return b ? T : VP8_STATUS_INVALID_PARAM
  2142.     }
  2143.     function AllocateBuffer(a) {
  2144.         var w = a.width;
  2145.         var h = a.height;
  2146.         if (w <= 0 || h <= 0) {
  2147.             return VP8_STATUS_INVALID_PARAM
  2148.         }
  2149.         if (!a.is_external_memory && a.private_memory == null) {
  2150.             var b = uint8_t;
  2151.             var c = 0;
  2152.             var d = a.colorspace;
  2153.             var e = int;
  2154.             var f = 0,
  2155.                 a_stride = 0;
  2156.             var g = 0;
  2157.             var i = uint64_t,
  2158.                 a_size = 0,
  2159.                 total_size = uint64_t;
  2160.             e = w * bA[d];
  2161.             i = e * h;
  2162.             if (d >= MODE_YUV) {
  2163.                 f = parseInt((w + 1) / 2);
  2164.                 g = f * parseInt((h + 1) / 2);
  2165.                 if (d == MODE_YUVA) {
  2166.                     a_stride = w;
  2167.                     a_size = a_stride * h
  2168.                 }
  2169.             }
  2170.             total_size = i + 2 * g + a_size;
  2171.             if ((total_size != total_size)) {
  2172.                 return VP8_STATUS_INVALID_PARAM
  2173.             }
  2174.             a.private_memory = b = malloc(total_size, size_t);
  2175.             a.private_memory_off = c = 0;
  2176.             if (b == null) {
  2177.                 return VP8_STATUS_OUT_OF_MEMORY
  2178.             }
  2179.             if (d >= MODE_YUV) {
  2180.                 var j = a.u.YUVA;
  2181.                 j.y = b;
  2182.                 j.y_off = c;
  2183.                 j.y_stride = e;
  2184.                 j.y_size = i;
  2185.                 j.u = b;
  2186.                 j.u_off = c + i;
  2187.                 j.u_stride = f;
  2188.                 j.u_size = g;
  2189.                 j.v = b;
  2190.                 j.v_off = c + i + g;
  2191.                 j.v_stride = f;
  2192.                 j.v_size = g;
  2193.                 if (d == MODE_YUVA) {
  2194.                     j.a = b;
  2195.                     j.a_off = c + i + 2 * g
  2196.                 }
  2197.                 j.a_size = a_size;
  2198.                 j.a_stride = a_stride
  2199.             } else {
  2200.                 var j = a.u.RGBA;
  2201.                 j.rgba = b;
  2202.                 j.rgba_off = c;
  2203.                 j.stride = e;
  2204.                 j.size = i
  2205.             }
  2206.         }
  2207.         return CheckDecBuffer(a)
  2208.     }
  2209.     function WebPAllocateDecBuffer(w, h, a, b) {
  2210.         if (b == null || w <= 0 || h <= 0) {
  2211.             return VP8_STATUS_INVALID_PARAM
  2212.         }
  2213.         if (a != null) {
  2214.             if (a.use_cropping) {
  2215.                 var c = a.crop_width;
  2216.                 var d = a.crop_height;
  2217.                 var x = a.crop_left & ~1;
  2218.                 var y = a.crop_top & ~1;
  2219.                 if (x < 0 || y < 0 || c <= 0 || d <= 0 || x + c > w || y + d > h) {
  2220.                     return VP8_STATUS_INVALID_PARAM
  2221.                 }
  2222.                 w = c;
  2223.                 h = d
  2224.             }
  2225.             if (a.use_scaling) {
  2226.                 if (a.scaled_width <= 0 || a.scaled_height <= 0) {
  2227.                     return VP8_STATUS_INVALID_PARAM
  2228.                 }
  2229.                 w = a.scaled_width;
  2230.                 h = a.scaled_height
  2231.             }
  2232.         }
  2233.         b.width = w;
  2234.         b.height = h;
  2235.         return AllocateBuffer(b)
  2236.     }
  2237.     function WebPInitDecBufferInternal(a, b) {
  2238.         if (b != N) return 0;
  2239.         if (!a) return 0;
  2240.         memset_(a, 0, 0, sizeof(a) * a.length);
  2241.         return 1
  2242.     }
  2243.     this.WebPFreeDecBuffer = function (a) {
  2244.         if (a) {
  2245.             if (!a.is_external_memory) a.private_memory = '';
  2246.             a.private_memory_off = 0;
  2247.             a.private_memory = a.private_memory_off = null
  2248.         }
  2249.     };
  2250.  
  2251.     function WebPCopyDecBuffer(a, b) {
  2252.         alert('todo: WebPCopyDecBuffer')
  2253.     }
  2254.     function WebPGrabDecBuffer(a, b) {
  2255.         alert('todo: WebPGrabDecBuffer')
  2256.     }
  2257.     function VP8DecodeLayer(a) {
  2258.         assert(a);
  2259.         assert(a.layer_data_size_ > 0);
  2260.         return 1
  2261.     }
  2262.     var bB = Arr((255 + 255 + 1), uint8_t);
  2263.     var bC = Arr((255 + 255 + 1), uint8_t);
  2264.     var bD = Arr((1020 + 1020 + 1), int8_t);
  2265.     var bE = Arr((112 + 112 + 1), int8_t);
  2266.     var bF = Arr((255 + 510 + 1), uint8_t);
  2267.     var bG = 0;
  2268.  
  2269.     function VP8DspInitTables(a) {
  2270.         if (!bG) {
  2271.             var i;
  2272.             for (i = -255; i <= 255; ++i) {
  2273.                 bB[255 + i] = (i < 0) ? -i : i;
  2274.                 bC[255 + i] = bB[255 + i] >> 1
  2275.             }
  2276.             for (i = -1020; i <= 1020; ++i) {
  2277.                 bD[1020 + i] = (i < -128) ? -128 : (i > 127) ? 127 : i
  2278.             }
  2279.             for (i = -112; i <= 112; ++i) {
  2280.                 bE[112 + i] = (i < -16) ? -16 : (i > 15) ? 15 : i
  2281.             }
  2282.             for (i = -255; i <= 255 + 255; ++i) {
  2283.                 bF[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i
  2284.             }
  2285.             bG = 1
  2286.         }
  2287.     };
  2288.  
  2289.     function clip_8b(v) {
  2290.         return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255
  2291.     };
  2292.  
  2293.     function STORE(x, y, v) {
  2294.         dst[dst_off + x + y * bj] = clip_8b(dst_off + dst[x + y * bj] + ((v) >> 3))
  2295.     };
  2296.     var bH = 20091 + (1 << 16);
  2297.     var bI = 35468;
  2298.  
  2299.     function MUL(a, b) {
  2300.         return (((a) * (b)) >> 16)
  2301.     }
  2302.     function TransformOne(e, f, g, h) {
  2303.         var C = Arr(4 * 4, 0),
  2304.             tmp, tmp_off;
  2305.         tmp_off = 0;
  2306.         var i;
  2307.         tmp = C;
  2308.         for (i = 0; i < 4; ++i) {
  2309.             var a = e[f + 0] + e[f + 8];
  2310.             var b = e[f + 0] - e[f + 8];
  2311.             var c = MUL(e[f + 4], bI) - MUL(e[f + 12], bH);
  2312.             var d = MUL(e[f + 4], bH) + MUL(e[f + 12], bI);
  2313.             tmp[tmp_off + 0] = a + d;
  2314.             tmp[tmp_off + 1] = b + c;
  2315.             tmp[tmp_off + 2] = b - c;
  2316.             tmp[tmp_off + 3] = a - d;
  2317.             tmp_off += 4;
  2318.             f++
  2319.         }
  2320.         tmp_off = 0;
  2321.         for (i = 0; i < 4; ++i) {
  2322.             var j = tmp[tmp_off + 0] + 4;
  2323.             var a = j + tmp[tmp_off + 8];
  2324.             var b = j - tmp[tmp_off + 8];
  2325.             var c = MUL(tmp[tmp_off + 4], bI) - MUL(tmp[tmp_off + 12], bH);
  2326.             var d = MUL(tmp[tmp_off + 4], bH) + MUL(tmp[tmp_off + 12], bI);
  2327.             g[h + 0 + 0 * bj] = clip_8b(g[h + 0 + 0 * bj] + ((a + d) >> 3));
  2328.             g[h + 1 + 0 * bj] = clip_8b(g[h + 1 + 0 * bj] + ((b + c) >> 3));
  2329.             g[h + 2 + 0 * bj] = clip_8b(g[h + 2 + 0 * bj] + ((b - c) >> 3));
  2330.             g[h + 3 + 0 * bj] = clip_8b(g[h + 3 + 0 * bj] + ((a - d) >> 3));
  2331.             tmp_off++;
  2332.             h += bj
  2333.         }
  2334.     };
  2335.  
  2336.     function TransformTwo(a, b, c, d, e) {
  2337.         TransformOne(a, b, c, d);
  2338.         if (e) {
  2339.             TransformOne(a, b + 16, c, d + 4)
  2340.         }
  2341.     }
  2342.     function TransformUV(a, b, c, d) {
  2343.         bM(a, b + 0 * 16, c, d + 0, 1);
  2344.         bM(a, b + 2 * 16, c, d + 4 * bj, 1)
  2345.     }
  2346.     function TransformDC(a, b, c, d) {
  2347.         var e = a[b + 0] + 4;
  2348.         var i, j;
  2349.         for (j = 0; j < 4; ++j) {
  2350.             for (i = 0; i < 4; ++i) {
  2351.                 var f = c[d + i + j * bj];
  2352.                 c[d + i + j * bj] = clip_8b(c[d + i + j * bj] + ((e) >> 3))
  2353.             }
  2354.         }
  2355.     };
  2356.  
  2357.     function TransformDCUV(a, b, c, d) {
  2358.         if (a[b + 0 * 16]) TransformDC(a, b + 0 * 16, c, d + 0);
  2359.         if (a[b + 1 * 16]) TransformDC(a, b + 1 * 16, c, d + 4);
  2360.         if (a[b + 2 * 16]) TransformDC(a, b + 2 * 16, c, d + 4 * bj);
  2361.         if (a[b + 3 * 16]) TransformDC(a, b + 3 * 16, c, d + 4 * bj + 4)
  2362.     };
  2363.  
  2364.     function TransformWHT(a, b) {
  2365.         var c = Arr(16, int);
  2366.         var i = int;
  2367.         for (i = 0; i < 4; ++i) {
  2368.             var d = a[0 + i] + a[12 + i];
  2369.             var e = a[4 + i] + a[8 + i];
  2370.             var f = a[4 + i] - a[8 + i];
  2371.             var g = a[0 + i] - a[12 + i];
  2372.             c[0 + i] = d + e;
  2373.             c[8 + i] = d - e;
  2374.             c[4 + i] = g + f;
  2375.             c[12 + i] = g - f
  2376.         }
  2377.         for (i = 0; i < 4; ++i) {
  2378.             var h = b[b.length - 1];
  2379.             var j = c[0 + i * 4] + 3;
  2380.             var d = j + c[3 + i * 4];
  2381.             var e = c[1 + i * 4] + c[2 + i * 4];
  2382.             var f = c[1 + i * 4] - c[2 + i * 4];
  2383.             var g = j - c[3 + i * 4];
  2384.             b[h + 0] = (d + e) >> 3;
  2385.             b[h + 16] = (g + f) >> 3;
  2386.             b[h + 32] = (d - e) >> 3;
  2387.             b[h + 48] = (g - f) >> 3;
  2388.             b[b.length - 1] += 64
  2389.         }
  2390.     };
  2391.  
  2392.     function VP8TransformWHT(a, b) {
  2393.         TransformWHT(a, b)
  2394.     };
  2395.  
  2396.     function OUT(x, y) {
  2397.         dst[(x) + (y) * bj]
  2398.     }
  2399.     function TrueMotion(a, b, c) {
  2400.         var d = a;
  2401.         var e = b - bj;
  2402.         var f = bF;
  2403.         var g = +255 - d[e - 1];
  2404.         var y;
  2405.         for (y = 0; y < c; ++y) {
  2406.             var h = f;
  2407.             var i = g + a[b - 1];
  2408.             var x;
  2409.             for (x = 0; x < c; ++x) {
  2410.                 a[b + x] = h[i + d[e + x]]
  2411.             }
  2412.             b += bj
  2413.         }
  2414.     };
  2415.  
  2416.     function TM4(a, b) {
  2417.         TrueMotion(a, b, 4)
  2418.     }
  2419.     function TM8uv(a, b) {
  2420.         TrueMotion(a, b, 8)
  2421.     }
  2422.     function TM16(a, b) {
  2423.         TrueMotion(a, b, 16)
  2424.     }
  2425.     function VE16(a, b) {
  2426.         var j;
  2427.         for (j = 0; j < 16; ++j) {
  2428.             memcpy(a, b + j * bj, a, b - bj, 16)
  2429.         }
  2430.     };
  2431.  
  2432.     function HE16(a, b) {
  2433.         var j;
  2434.         for (j = 16; j > 0; --j) {
  2435.             memset_(a, b + 0, a[b - 1], 16);
  2436.             b += bj
  2437.         }
  2438.     };
  2439.  
  2440.     function Put16(v, a, b) {
  2441.         var j;
  2442.         for (j = 0; j < 16; ++j) {
  2443.             for (i = 0; i < (16); ++i) a[b + j * bj + i] = v
  2444.         }
  2445.     };
  2446.  
  2447.     function DC16(a, b) {
  2448.         var c = 16;
  2449.         var j;
  2450.         for (j = 0; j < 16; ++j) {
  2451.             c += a[b - 1 + j * bj] + a[b + j - bj]
  2452.         }
  2453.         Put16(c >> 5, a, b)
  2454.     };
  2455.  
  2456.     function DC16NoTop(a, b) {
  2457.         var c = 8;
  2458.         var j;
  2459.         for (j = 0; j < 16; ++j) {
  2460.             c += a[b - 1 + j * bj]
  2461.         }
  2462.         Put16(c >> 4, a, b)
  2463.     };
  2464.  
  2465.     function DC16NoLeft(a, b) {
  2466.         var c = 8;
  2467.         var i;
  2468.         for (i = 0; i < 16; ++i) {
  2469.             c += a[b + i - bj]
  2470.         }
  2471.         Put16(c >> 4, a, b)
  2472.     };
  2473.  
  2474.     function DC16NoTopLeft(a, b) {
  2475.         Put16(0x80, a, b)
  2476.     };
  2477.  
  2478.     function AVG3(a, b, c) {
  2479.         return (((a) + 2 * (b) + (c) + 2) >> 2)
  2480.     };
  2481.  
  2482.     function AVG2(a, b) {
  2483.         return (((a) + (b) + 1) >> 1)
  2484.     };
  2485.  
  2486.     function VE4(a, b) {
  2487.         var c = a;
  2488.         var d = b - bj;
  2489.         var e = new Array();
  2490.         e.push(AVG3(c[d - 1], c[d + 0], c[d + 1]));
  2491.         e.push(AVG3(c[d + 0], c[d + 1], c[d + 2]));
  2492.         e.push(AVG3(c[d + 1], c[d + 2], c[d + 3]));
  2493.         e.push(AVG3(c[d + 2], c[d + 3], c[d + 4]));
  2494.         var i;
  2495.         for (i = 0; i < 4; ++i) {
  2496.             memcpy(a, b + i * bj, e, 0, 4 * sizeof(e))
  2497.         }
  2498.     };
  2499.  
  2500.     function HE4(a, b) {
  2501.         var A = a[b - 1 - bj];
  2502.         var B = a[b - 1];
  2503.         var C = a[b - 1 + bj];
  2504.         var D = a[b - 1 + 2 * bj];
  2505.         var E = a[b - 1 + 3 * bj];
  2506.         a[b + 0 + 0 * bj] = a[b + 1 + 0 * bj] = a[b + 2 + 0 * bj] = a[b + 3 + 0 * bj] = AVG3(A, B, C);
  2507.         a[b + 0 + 1 * bj] = a[b + 1 + 1 * bj] = a[b + 2 + 1 * bj] = a[b + 3 + 1 * bj] = AVG3(B, C, D);
  2508.         a[b + 0 + 2 * bj] = a[b + 1 + 2 * bj] = a[b + 2 + 2 * bj] = a[b + 3 + 2 * bj] = AVG3(C, D, E);
  2509.         a[b + 0 + 3 * bj] = a[b + 1 + 3 * bj] = a[b + 2 + 3 * bj] = a[b + 3 + 3 * bj] = AVG3(D, E, E)
  2510.     };
  2511.  
  2512.     function DC4(a, b) {
  2513.         var c = 4;
  2514.         var i;
  2515.         for (i = 0; i < 4; ++i) c += a[b + i - bj] + a[b - 1 + i * bj];
  2516.         c >>= 3;
  2517.         for (i = 0; i < 4; ++i) {
  2518.             memset_(a, b + i * bj, c, 4)
  2519.         }
  2520.     };
  2521.  
  2522.     function RD4(a, b) {
  2523.         var I = a[b - 1 + 0 * bj];
  2524.         var J = a[b - 1 + 1 * bj];
  2525.         var K = a[b - 1 + 2 * bj];
  2526.         var L = a[b - 1 + 3 * bj];
  2527.         var X = a[b - 1 - bj];
  2528.         var A = a[b + 0 - bj];
  2529.         var B = a[b + 1 - bj];
  2530.         var C = a[b + 2 - bj];
  2531.         var D = a[b + 3 - bj];
  2532.         a[b + (0) + (3) * bj] = AVG3(J, K, L);
  2533.         a[b + (0) + (2) * bj] = a[b + (1) + (3) * bj] = AVG3(I, J, K);
  2534.         a[b + (0) + (1) * bj] = a[b + (1) + (2) * bj] = a[b + (2) + (3) * bj] = AVG3(X, I, J);
  2535.         a[b + (0) + (0) * bj] = a[b + (1) + (1) * bj] = a[b + (2) + (2) * bj] = a[b + (3) + (3) * bj] = AVG3(A, X, I);
  2536.         a[b + (1) + (0) * bj] = a[b + (2) + (1) * bj] = a[b + (3) + (2) * bj] = AVG3(B, A, X);
  2537.         a[b + (2) + (0) * bj] = a[b + (3) + (1) * bj] = AVG3(C, B, A);
  2538.         a[b + (3) + (0) * bj] = AVG3(D, C, B)
  2539.     };
  2540.  
  2541.     function LD4(a, b) {
  2542.         var A = a[b + 0 - bj];
  2543.         var B = a[b + 1 - bj];
  2544.         var C = a[b + 2 - bj];
  2545.         var D = a[b + 3 - bj];
  2546.         var E = a[b + 4 - bj];
  2547.         var F = a[b + 5 - bj];
  2548.         var G = a[b + 6 - bj];
  2549.         var H = a[b + 7 - bj];
  2550.         a[b + (0) + (0) * bj] = AVG3(A, B, C);
  2551.         a[b + (1) + (0) * bj] = a[b + (0) + (1) * bj] = AVG3(B, C, D);
  2552.         a[b + (2) + (0) * bj] = a[b + (1) + (1) * bj] = a[b + (0) + (2) * bj] = AVG3(C, D, E);
  2553.         a[b + (3) + (0) * bj] = a[b + (2) + (1) * bj] = a[b + (1) + (2) * bj] = a[b + (0) + (3) * bj] = AVG3(D, E, F);
  2554.         a[b + (3) + (1) * bj] = a[b + (2) + (2) * bj] = a[b + (1) + (3) * bj] = AVG3(E, F, G);
  2555.         a[b + (3) + (2) * bj] = a[b + (2) + (3) * bj] = AVG3(F, G, H);
  2556.         a[b + (3) + (3) * bj] = AVG3(G, H, H)
  2557.     };
  2558.  
  2559.     function VR4(a, b) {
  2560.         var I = a[b - 1 + 0 * bj];
  2561.         var J = a[b - 1 + 1 * bj];
  2562.         var K = a[b - 1 + 2 * bj];
  2563.         var X = a[b - 1 - bj];
  2564.         var A = a[b + 0 - bj];
  2565.         var B = a[b + 1 - bj];
  2566.         var C = a[b + 2 - bj];
  2567.         var D = a[b + 3 - bj];
  2568.         a[b + (0) + (0) * bj] = a[b + (1) + (2) * bj] = AVG2(X, A);
  2569.         a[b + (1) + (0) * bj] = a[b + (2) + (2) * bj] = AVG2(A, B);
  2570.         a[b + (2) + (0) * bj] = a[b + (3) + (2) * bj] = AVG2(B, C);
  2571.         a[b + (3) + (0) * bj] = AVG2(C, D);
  2572.         a[b + (0) + (3) * bj] = AVG3(K, J, I);
  2573.         a[b + (0) + (2) * bj] = AVG3(J, I, X);
  2574.         a[b + (0) + (1) * bj] = a[b + (1) + (3) * bj] = AVG3(I, X, A);
  2575.         a[b + (1) + (1) * bj] = a[b + (2) + (3) * bj] = AVG3(X, A, B);
  2576.         a[b + (2) + (1) * bj] = a[b + (3) + (3) * bj] = AVG3(A, B, C);
  2577.         a[b + (3) + (1) * bj] = AVG3(B, C, D)
  2578.     };
  2579.  
  2580.     function VL4(a, b) {
  2581.         var A = a[b + 0 - bj];
  2582.         var B = a[b + 1 - bj];
  2583.         var C = a[b + 2 - bj];
  2584.         var D = a[b + 3 - bj];
  2585.         var E = a[b + 4 - bj];
  2586.         var F = a[b + 5 - bj];
  2587.         var G = a[b + 6 - bj];
  2588.         var H = a[b + 7 - bj];
  2589.         a[b + (0) + (0) * bj] = AVG2(A, B);
  2590.         a[b + (1) + (0) * bj] = a[b + (0) + (2) * bj] = AVG2(B, C);
  2591.         a[b + (2) + (0) * bj] = a[b + (1) + (2) * bj] = AVG2(C, D);
  2592.         a[b + (3) + (0) * bj] = a[b + (2) + (2) * bj] = AVG2(D, E);
  2593.         a[b + (0) + (1) * bj] = AVG3(A, B, C);
  2594.         a[b + (1) + (1) * bj] = a[b + (0) + (3) * bj] = AVG3(B, C, D);
  2595.         a[b + (2) + (1) * bj] = a[b + (1) + (3) * bj] = AVG3(C, D, E);
  2596.         a[b + (3) + (1) * bj] = a[b + (2) + (3) * bj] = AVG3(D, E, F);
  2597.         a[b + (3) + (2) * bj] = AVG3(E, F, G);
  2598.         a[b + (3) + (3) * bj] = AVG3(F, G, H)
  2599.     };
  2600.  
  2601.     function HU4(a, b) {
  2602.         var I = a[b - 1 + 0 * bj];
  2603.         var J = a[b - 1 + 1 * bj];
  2604.         var K = a[b - 1 + 2 * bj];
  2605.         var L = a[b - 1 + 3 * bj];
  2606.         a[b + (0) + (0) * bj] = AVG2(I, J);
  2607.         a[b + (2) + (0) * bj] = a[b + (0) + (1) * bj] = AVG2(J, K);
  2608.         a[b + (2) + (1) * bj] = a[b + (0) + (2) * bj] = AVG2(K, L);
  2609.         a[b + (1) + (0) * bj] = AVG3(I, J, K);
  2610.         a[b + (3) + (0) * bj] = a[b + (1) + (1) * bj] = AVG3(J, K, L);
  2611.         a[b + (3) + (1) * bj] = a[b + (1) + (2) * bj] = AVG3(K, L, L);
  2612.         a[b + (3) + (2) * bj] = a[b + (2) + (2) * bj] = a[b + (0) + (3) * bj] = a[b + (1) + (3) * bj] = a[b + (2) + (3) * bj] = a[b + (3) + (3) * bj] = L
  2613.     };
  2614.  
  2615.     function HD4(a, b) {
  2616.         var I = a[b - 1 + 0 * bj];
  2617.         var J = a[b - 1 + 1 * bj];
  2618.         var K = a[b - 1 + 2 * bj];
  2619.         var L = a[b - 1 + 3 * bj];
  2620.         var X = a[b - 1 - bj];
  2621.         var A = a[b + 0 - bj];
  2622.         var B = a[b + 1 - bj];
  2623.         var C = a[b + 2 - bj];
  2624.         a[b + (0) + (0) * bj] = a[b + (2) + (1) * bj] = AVG2(I, X);
  2625.         a[b + (0) + (1) * bj] = a[b + (2) + (2) * bj] = AVG2(J, I);
  2626.         a[b + (0) + (2) * bj] = a[b + (2) + (3) * bj] = AVG2(K, J);
  2627.         a[b + (0) + (3) * bj] = AVG2(L, K);
  2628.         a[b + (3) + (0) * bj] = AVG3(A, B, C);
  2629.         a[b + (2) + (0) * bj] = AVG3(X, A, B);
  2630.         a[b + (1) + (0) * bj] = a[b + (3) + (1) * bj] = AVG3(I, X, A);
  2631.         a[b + (1) + (1) * bj] = a[b + (3) + (2) * bj] = AVG3(J, I, X);
  2632.         a[b + (1) + (2) * bj] = a[b + (3) + (3) * bj] = AVG3(K, J, I);
  2633.         a[b + (1) + (3) * bj] = AVG3(L, K, J)
  2634.     };
  2635.  
  2636.     function VE8uv(a, b) {
  2637.         var j;
  2638.         for (j = 0; j < 8; ++j) {
  2639.             memcpy(a, b + j * bj, a, b - bj, 8)
  2640.         }
  2641.     };
  2642.  
  2643.     function HE8uv(a, b) {
  2644.         var j;
  2645.         for (j = 0; j < 8; ++j) {
  2646.             memset_(a, b + 0, a[b - 1], 8);
  2647.             b += bj
  2648.         }
  2649.     };
  2650.  
  2651.     function Put8x8uv(v, a, b) {
  2652.         var j, k;
  2653.         for (j = 0; j < 8; ++j) {
  2654.             for (k = 0; k < 8; ++k) a[b + k + j * bj] = v
  2655.         }
  2656.     };
  2657.  
  2658.     function DC8uv(a, b) {
  2659.         var c = 8;
  2660.         var i;
  2661.         for (i = 0; i < 8; ++i) {
  2662.             c += a[b + i - bj] + a[b - 1 + i * bj]
  2663.         }
  2664.         Put8x8uv(((c >> 4) * 0x01), a, b)
  2665.     };
  2666.  
  2667.     function DC8uvNoLeft(a, b) {
  2668.         var c = 4;
  2669.         var i;
  2670.         for (i = 0; i < 8; ++i) {
  2671.             c += a[b + i - bj]
  2672.         }
  2673.         Put8x8uv(((c >> 3) * 0x01), a, b)
  2674.     };
  2675.  
  2676.     function DC8uvNoTop(a, b) {
  2677.         var c = 4;
  2678.         var i;
  2679.         for (i = 0; i < 8; ++i) {
  2680.             c += a[b - 1 + i * bj]
  2681.         }
  2682.         Put8x8uv(((c >> 3) * 0x01), a, b)
  2683.     };
  2684.  
  2685.     function DC8uvNoTopLeft(a, b) {
  2686.         Put8x8uv(0x80, a, b)
  2687.     };
  2688.     var bJ = new Array(function (v, o) {
  2689.         DC4(v, o)
  2690.     }, function (v, o) {
  2691.         TM4(v, o)
  2692.     }, function (v, o) {
  2693.         VE4(v, o)
  2694.     }, function (v, o) {
  2695.         HE4(v, o)
  2696.     }, function (v, o) {
  2697.         RD4(v, o)
  2698.     }, function (v, o) {
  2699.         VR4(v, o)
  2700.     }, function (v, o) {
  2701.         LD4(v, o)
  2702.     }, function (v, o) {
  2703.         VL4(v, o)
  2704.     }, function (v, o) {
  2705.         HD4(v, o)
  2706.     }, function (v, o) {
  2707.         HU4(v, o)
  2708.     });
  2709.     var bK = new Array(function (v, o) {
  2710.         DC16(v, o)
  2711.     }, function (v, o) {
  2712.         TM16(v, o)
  2713.     }, function (v, o) {
  2714.         VE16(v, o)
  2715.     }, function (v, o) {
  2716.         HE16(v, o)
  2717.     }, function (v, o) {
  2718.         DC16NoTop(v, o)
  2719.     }, function (v, o) {
  2720.         DC16NoLeft(v, o)
  2721.     }, function (v, o) {
  2722.         DC16NoTopLeft(v, o)
  2723.     });
  2724.     var bL = new Array(function (v, o) {
  2725.         DC8uv(v, o)
  2726.     }, function (v, o) {
  2727.         TM8uv(v, o)
  2728.     }, function (v, o) {
  2729.         VE8uv(v, o)
  2730.     }, function (v, o) {
  2731.         HE8uv(v, o)
  2732.     }, function (v, o) {
  2733.         DC8uvNoTop(v, o)
  2734.     }, function (v, o) {
  2735.         DC8uvNoLeft(v, o)
  2736.     }, function (v, o) {
  2737.         DC8uvNoTopLeft(v, o)
  2738.     });
  2739.  
  2740.     function do_filter2(p, b, c) {
  2741.         var d = p[b - 2 * c],
  2742.             p0 = p[b - c],
  2743.             q0 = p[b + 0],
  2744.             q1 = p[b + c];
  2745.         var a = 3 * (q0 - p0) + bD[1020 + d - q1];
  2746.         var e = bE[112 + ((a + 4) >> 3)];
  2747.         var f = bE[112 + ((a + 3) >> 3)];
  2748.         p[b - c] = bF[255 + p0 + f];
  2749.         p[b + 0] = bF[255 + q0 - e]
  2750.     };
  2751.  
  2752.     function do_filter4(p, b, c) {
  2753.         var d = p[b - 2 * c],
  2754.             p0 = p[b - c],
  2755.             q0 = p[b + 0],
  2756.             q1 = p[b + c];
  2757.         var a = 3 * (q0 - p0);
  2758.         var e = bE[112 + ((a + 4) >> 3)];
  2759.         var f = bE[112 + ((a + 3) >> 3)];
  2760.         var g = (e + 1) >> 1;
  2761.         p[b - 2 * c] = bF[255 + d + g];
  2762.         p[b - c] = bF[255 + p0 + f];
  2763.         p[b + 0] = bF[255 + q0 - e];
  2764.         p[b + c] = bF[255 + q1 - g]
  2765.     };
  2766.  
  2767.     function do_filter6(p, b, c) {
  2768.         var d = p[b - 3 * c],
  2769.             p1 = p[b - 2 * c],
  2770.             p0 = p[b - c];
  2771.         var e = p[b + 0],
  2772.             q1 = p[b + c],
  2773.             q2 = p[b + 2 * c];
  2774.         var a = bD[1020 + 3 * (e - p0) + bD[1020 + p1 - q1]];
  2775.         var f = (27 * a + 63) >> 7;
  2776.         var g = (18 * a + 63) >> 7;
  2777.         var h = (9 * a + 63) >> 7;
  2778.         p[b - 3 * c] = bF[255 + d + h];
  2779.         p[b - 2 * c] = bF[255 + p1 + g];
  2780.         p[b - c] = bF[255 + p0 + f];
  2781.         p[b + 0] = bF[255 + e - f];
  2782.         p[b + c] = bF[255 + q1 - g];
  2783.         p[b + 2 * c] = bF[255 + q2 - h]
  2784.     };
  2785.  
  2786.     function hev(p, a, b, c) {
  2787.         var d = p[a - 2 * b],
  2788.             p0 = p[a - b],
  2789.             q0 = p[a + 0],
  2790.             q1 = p[a + b];
  2791.         return (bB[255 + d - p0] > c) || (bB[255 + q1 - q0] > c)
  2792.     };
  2793.  
  2794.     function needs_filter(p, a, b, c) {
  2795.         var d = p[a - 2 * b],
  2796.             p0 = p[a - b],
  2797.             q0 = p[a + 0],
  2798.             q1 = p[a + b];
  2799.         return (2 * bB[255 + p0 - q0] + bC[255 + d - q1]) <= c
  2800.     };
  2801.  
  2802.     function needs_filter2(p, a, b, t, c) {
  2803.         var d = p[a - 4 * b],
  2804.             p2 = p[a - 3 * b],
  2805.             p1 = p[a - 2 * b],
  2806.             p0 = p[a - b];
  2807.         var e = p[a + 0],
  2808.             q1 = p[a + b],
  2809.             q2 = p[a + 2 * b],
  2810.             q3 = p[a + 3 * b];
  2811.         if ((2 * bB[255 + p0 - e] + bC[255 + p1 - q1]) > t) return 0;
  2812.         return bB[255 + d - p2] <= c && bB[255 + p2 - p1] <= c && bB[255 + p1 - p0] <= c && bB[255 + q3 - q2] <= c && bB[255 + q2 - q1] <= c && bB[255 + q1 - e] <= c
  2813.     };
  2814.  
  2815.     function SimpleVFilter16(p, a, b, c) {
  2816.         var i;
  2817.         for (i = 0; i < 16; ++i) {
  2818.             if (needs_filter(p, a + i, b, c)) {
  2819.                 do_filter2(p, a + i, b)
  2820.             }
  2821.         }
  2822.     };
  2823.  
  2824.     function SimpleHFilter16(p, a, b, c) {
  2825.         var i;
  2826.         for (i = 0; i < 16; ++i) {
  2827.             if (needs_filter(p, a + i * b, 1, c)) {
  2828.                 do_filter2(p, a + i * b, 1)
  2829.             }
  2830.         }
  2831.     };
  2832.  
  2833.     function SimpleVFilter16i(p, a, b, c) {
  2834.         var k;
  2835.         for (k = 3; k > 0; --k) {
  2836.             a += 4 * b;
  2837.             SimpleVFilter16(p, a + 0, b, c)
  2838.         }
  2839.     };
  2840.  
  2841.     function SimpleHFilter16i(p, a, b, c) {
  2842.         var k;
  2843.         for (k = 3; k > 0; --k) {
  2844.             a += 4;
  2845.             SimpleHFilter16(p, a + 0, b, c)
  2846.         }
  2847.     };
  2848.  
  2849.     function FilterLoop26(p, a, b, c, d, e, f, g) {
  2850.         while (d-- > 0) {
  2851.             if (needs_filter2(p, a + 0, b, e, f)) {
  2852.                 if (hev(p, a + 0, b, g)) {
  2853.                     do_filter2(p, a + 0, b)
  2854.                 } else {
  2855.                     do_filter6(p, a + 0, b)
  2856.                 }
  2857.             }
  2858.             a += c
  2859.         }
  2860.     };
  2861.  
  2862.     function FilterLoop24(p, a, b, c, d, e, f, g) {
  2863.         while (d-- > 0) {
  2864.             if (needs_filter2(p, a + 0, b, e, f)) {
  2865.                 if (hev(p, a + 0, b, g)) {
  2866.                     do_filter2(p, a + 0, b)
  2867.                 } else {
  2868.                     do_filter4(p, a + 0, b)
  2869.                 }
  2870.             }
  2871.             a += c
  2872.         }
  2873.     };
  2874.  
  2875.     function VFilter16(p, a, b, c, d, e) {
  2876.         FilterLoop26(p, a + 0, b, 1, 16, c, d, e)
  2877.     }
  2878.     function HFilter16(p, a, b, c, d, e) {
  2879.         FilterLoop26(p, a + 0, 1, b, 16, c, d, e)
  2880.     };
  2881.  
  2882.     function VFilter16i(p, a, b, c, d, e) {
  2883.         var k;
  2884.         for (k = 3; k > 0; --k) {
  2885.             a += 4 * b;
  2886.             FilterLoop24(p, a + 0, b, 1, 16, c, d, e)
  2887.         }
  2888.     };
  2889.  
  2890.     function HFilter16i(p, a, b, c, d, e) {
  2891.         var k;
  2892.         for (k = 3; k > 0; --k) {
  2893.             a += 4;
  2894.             FilterLoop24(p, a + 0, 1, b, 16, c, d, e)
  2895.         }
  2896.     };
  2897.  
  2898.     function VFilter8(u, a, v, b, c, d, e, f) {
  2899.         FilterLoop26(u, a, c, 1, 8, d, e, f);
  2900.         FilterLoop26(v, b, c, 1, 8, d, e, f)
  2901.     };
  2902.  
  2903.     function HFilter8(u, a, v, b, c, d, e, f) {
  2904.         FilterLoop26(u, a, 1, c, 8, d, e, f);
  2905.         FilterLoop26(v, b, 1, c, 8, d, e, f)
  2906.     };
  2907.  
  2908.     function VFilter8i(u, a, v, b, c, d, e, f) {
  2909.         FilterLoop24(u, a + 4 * c, c, 1, 8, d, e, f);
  2910.         FilterLoop24(v, b + 4 * c, c, 1, 8, d, e, f)
  2911.     };
  2912.  
  2913.     function HFilter8i(u, a, v, b, c, d, e, f) {
  2914.         FilterLoop24(u, a + 4, 1, c, 8, d, e, f);
  2915.         FilterLoop24(v, b + 4, 1, c, 8, d, e, f)
  2916.     };
  2917.     var bM;
  2918.     var bN;
  2919.     var bO;
  2920.     var bP;
  2921.     var bQ;
  2922.     var bR;
  2923.     var bS;
  2924.     var bT;
  2925.     var bU;
  2926.     var bV;
  2927.     var bW;
  2928.     var bX;
  2929.     var bY;
  2930.     var bZ;
  2931.     var ca;
  2932.     var cb;
  2933.  
  2934.     function VP8DspInit(a) {
  2935.         bM = TransformTwo;
  2936.         bN = TransformUV;
  2937.         bO = TransformDC;
  2938.         bP = TransformDCUV;
  2939.         bQ = VFilter16;
  2940.         bR = HFilter16;
  2941.         bS = VFilter8;
  2942.         bT = HFilter8;
  2943.         bU = VFilter16i;
  2944.         bV = HFilter16i;
  2945.         bW = VFilter8i;
  2946.         bX = HFilter8i;
  2947.         bY = SimpleVFilter16;
  2948.         bZ = SimpleHFilter16;
  2949.         ca = SimpleVFilter16i;
  2950.         cb = SimpleHFilter16i
  2951.     };
  2952.     var cc = (32 - 1);
  2953.     var cd = 3;
  2954.     var ce = 1;
  2955.  
  2956.     function InitThreadContext(a) {
  2957.         a.cache_id_ = 0;
  2958.         if (a.use_threads_) {
  2959.             var b = a.worker_;
  2960.             if (!WebPWorkerReset(b)) {
  2961.                 return VP8SetError(a, VP8_STATUS_OUT_OF_MEMORY, "thread initialization failed.")
  2962.             }
  2963.             b.data1 = a;
  2964.             b.data2 = a.thread_ctx_.io_;
  2965.             b.hook = VP8FinishRow;
  2966.             a.num_caches_ = (a.filter_type_ > 0) ? cd : cd - 1
  2967.         } else {
  2968.             a.num_caches_ = ce
  2969.         }
  2970.         return 1
  2971.     }
  2972.     var cf = new Array(0, 2, 8);
  2973.  
  2974.     function AllocateMemory(a) {
  2975.         var b = a.num_caches_;
  2976.         var c = a.mb_w_;
  2977.         var d = 4 * c * sizeof(uint8_t);
  2978.         var e = (16 + 8 + 8) * c;
  2979.         var f = (c + 1) * sizeof(bw);
  2980.         var g = (a.filter_type_ > 0) ? c * (a.use_threads_ ? 2 : 1) * sizeof(bv) : 0;
  2981.         var h = bk * sizeof(a.yuv_b_);
  2982.         var i = 384 * sizeof(a.coeffs_);
  2983.         var j = (16 * b + parseInt(cf[a.filter_type_]) * 3 / 2);
  2984.         var k = e * j;
  2985.         var l = a.alpha_data_ ? (a.pic_hdr_.width_ * a.pic_hdr_.height_) : 0;
  2986.         var m = d + e + f + g + h + i + k + l + cc;
  2987.         var n = uint8_t,
  2988.             mem_offset = 0;
  2989.         if (m > a.mem_size_) {
  2990.             a.mem_ = 0;
  2991.             a.mem_size_ = 0;
  2992.             if (a.mem_ == null) {
  2993.                 return VP8SetError(a, 'VP8_STATUS_OUT_OF_MEMORY', "no memory during frame initialization.")
  2994.             }
  2995.             a.mem_size_ = m
  2996.         }
  2997.         n = a.mem_;
  2998.         a.intra_t_ = 205;
  2999.         a.y_t_ = memset(205, (16 * c) * sizeof(a.y_t_));
  3000.         a.u_t_ = memset(205, (8 * c) * sizeof(a.u_t_));
  3001.         a.v_t_ = memset(205, (8 * c) * sizeof(a.v_t_));
  3002.         a.f_info_ = g ? memset_wl(bv, g) : null;
  3003.         a.f_info_off = g ? 0 : null;
  3004.         a.thread_ctx_.id_ = 0;
  3005.         a.thread_ctx_.f_info_ = a.f_info_;
  3006.         if (a.use_threads_) {
  3007.             a.thread_ctx_.f_info_off += c
  3008.         }
  3009.         assert((h & cc) == 0);
  3010.         a.yuv_b_ = memset(205, h * sizeof(a.yuv_b_));
  3011.         a.coeffs_ = -12851;
  3012.         a.cache_y_stride_ = 16 * c;
  3013.         a.cache_uv_stride_ = 8 * c; {
  3014.             var o = cf[a.filter_type_];
  3015.             var p = o * a.cache_y_stride_;
  3016.             var q = (o / 2) * a.cache_uv_stride_;
  3017.             a.cache_y_ = Arr(k, 205);
  3018.             a.cache_y_off = +p;
  3019.             a.cache_u_ = a.cache_y_;
  3020.             a.cache_u_off = a.cache_y_off + 16 * b * a.cache_y_stride_ + q;
  3021.             a.cache_v_ = a.cache_u_;
  3022.             a.cache_v_off = a.cache_u_off + 8 * b * a.cache_uv_stride_ + q
  3023.         }
  3024.         a.alpha_plane_ = l ? Arr(l, uint8_t) : null;
  3025.         a.mb_info_ = memset_wl(bw, f);
  3026.         a.intra_t_ = memset(bh, d);
  3027.         return 1
  3028.     }
  3029.     function InitIo(a, b) {
  3030.         b.width = a.pic_hdr_.width_;
  3031.         b.height = a.pic_hdr_.height_;
  3032.         b.mb_y = 0;
  3033.         b.y = a.cache_y_;
  3034.         b.y_off = a.cache_y_off;
  3035.         b.u = a.cache_u_;
  3036.         b.u_off = a.cache_u_off;
  3037.         b.v = a.cache_v_;
  3038.         b.v_off = a.cache_v_off;
  3039.         b.y_stride = a.cache_y_stride_;
  3040.         b.uv_stride = a.cache_uv_stride_;
  3041.         b.fancy_upsampling = 0;
  3042.         b.a = null;
  3043.         b.a_off = null
  3044.     }
  3045.     function VP8InitFrame(a, b) {
  3046.         if (!InitThreadContext(a)) return 0;
  3047.         if (!AllocateMemory(a)) return 0;
  3048.         InitIo(a, b);
  3049.         VP8DspInitTables();
  3050.         VP8DspInit();
  3051.         return 1
  3052.     }
  3053.     function hev_thresh_from_level(a, b) {
  3054.         if (b) {
  3055.             return (a >= 40) ? 2 : (a >= 15) ? 1 : 0
  3056.         } else {
  3057.             return (a >= 40) ? 3 : (a >= 20) ? 2 : (a >= 15) ? 1 : 0
  3058.         }
  3059.     }
  3060.     function DoFilter(a, b, c) {
  3061.         var d = a.thread_ctx_;
  3062.         var e = a.cache_y_stride_;
  3063.         var f = d.f_info_[1 + b];
  3064.         var g = a.cache_y_;
  3065.         var h = a.cache_y_off + d.id_ * 16 * e + b * 16;
  3066.         var i = f.f_level_;
  3067.         var j = f.f_ilevel_;
  3068.         var k = 2 * i + j;
  3069.         if (i == 0) {
  3070.             return
  3071.         }
  3072.         if (a.filter_type_ == 1) {
  3073.             if (b > 0) {
  3074.                 bZ(g, h, e, k + 4)
  3075.             }
  3076.             if (f.f_inner_) {
  3077.                 cb(g, h, e, k)
  3078.             }
  3079.             if (c > 0) {
  3080.                 bY(g, h, e, k + 4)
  3081.             }
  3082.             if (f.f_inner_) {
  3083.                 ca(g, h, e, k)
  3084.             }
  3085.         } else {
  3086.             var l = a.cache_uv_stride_;
  3087.             var m = a.cache_u_;
  3088.             var n = a.cache_u_off + d.id_ * 8 * l + b * 8;
  3089.             var o = a.cache_v_;
  3090.             var p = a.cache_v_off + d.id_ * 8 * l + b * 8;
  3091.             var q = hev_thresh_from_level(i, a.frm_hdr_.key_frame_);
  3092.             if (b > 0) {
  3093.                 bR(g, h, e, k + 4, j, q);
  3094.                 bT(m, n, o, p, l, k + 4, j, q)
  3095.             }
  3096.             if (f.f_inner_) {
  3097.                 bV(g, h, e, k, j, q);
  3098.                 bX(m, n, o, p, l, k, j, q)
  3099.             }
  3100.             if (c > 0) {
  3101.                 bQ(g, h, e, k + 4, j, q);
  3102.                 bS(m, n, o, p, l, k + 4, j, q)
  3103.             }
  3104.             if (f.f_inner_) {
  3105.                 bU(g, h, e, k, j, q);
  3106.                 bW(m, n, o, p, l, k, j, q)
  3107.             }
  3108.         }
  3109.     }
  3110.     function FilterRow(a) {
  3111.         var b = int;
  3112.         var c = a.thread_ctx_.mb_y_;
  3113.         assert(a.thread_ctx_.filter_row_);
  3114.         for (b = a.tl_mb_x_; b < a.br_mb_x_; ++b) {
  3115.             DoFilter(a, b, c)
  3116.         }
  3117.     }
  3118.     function VP8StoreBlock(a) {
  3119.         if (a.filter_type_ > 0) {
  3120.             var b = a.f_info_[1 + a.mb_x_];
  3121.             var c = a.mb_info_[1 + a.mb_x_].skip_;
  3122.             var d = a.filter_levels_[a.segment_];
  3123.             if (a.filter_hdr_.use_lf_delta_) {
  3124.                 d += a.filter_hdr_.ref_lf_delta_[0];
  3125.                 if (a.is_i4x4_) {
  3126.                     d += a.filter_hdr_.mode_lf_delta_[0]
  3127.                 }
  3128.             }
  3129.             d = (d < 0) ? 0 : (d > 63) ? 63 : d;
  3130.             b.f_level_ = d;
  3131.             if (a.filter_hdr_.sharpness_ > 0) {
  3132.                 if (a.filter_hdr_.sharpness_ > 4) {
  3133.                     d >>= 2
  3134.                 } else {
  3135.                     d >>= 1
  3136.                 }
  3137.                 if (d > 9 - a.filter_hdr_.sharpness_) {
  3138.                     d = 9 - a.filter_hdr_.sharpness_
  3139.                 }
  3140.             }
  3141.             b.f_ilevel_ = (d < 1) ? 1 : d;
  3142.             b.f_inner_ = (!c || a.is_i4x4_) + 0
  3143.         } {
  3144.             var y;
  3145.             var e = a.cache_id_ * 16 * a.cache_y_stride_;
  3146.             var f = a.cache_id_ * 8 * a.cache_uv_stride_;
  3147.             var g = a.cache_y_;
  3148.             var h = a.cache_y_off + a.mb_x_ * 16 + e;
  3149.             var i = a.cache_u_;
  3150.             var j = a.cache_u_off + a.mb_x_ * 8 + f;
  3151.             var k = a.cache_v_;
  3152.             var l = a.cache_v_off + a.mb_x_ * 8 + f;
  3153.             for (y = 0; y < 16; ++y) {
  3154.                 memcpy(g, h + y * a.cache_y_stride_, a.yuv_b_, +bm + y * bj, 16)
  3155.             }
  3156.             for (y = 0; y < 8; ++y) {
  3157.                 memcpy(i, j + y * a.cache_uv_stride_, a.yuv_b_, +bn + y * bj, 8);
  3158.                 memcpy(k, l + y * a.cache_uv_stride_, a.yuv_b_, +bo + y * bj, 8)
  3159.             }
  3160.         }
  3161.     }
  3162.     function MACROBLOCK_VPOS(a) {
  3163.         return ((a) * 16)
  3164.     }
  3165.     function VP8FinishRow(a, b) {
  3166.         var c = 1;
  3167.         var d = a.thread_ctx_;
  3168.         var e = cf[a.filter_type_];
  3169.         var f = e * a.cache_y_stride_;
  3170.         var g = parseInt(e / 2) * a.cache_uv_stride_;
  3171.         var h = d.id_ * 16 * a.cache_y_stride_;
  3172.         var i = d.id_ * 8 * a.cache_uv_stride_;
  3173.         var j = a.cache_y_;
  3174.         var k = a.cache_y_off - f + h;
  3175.         var l = a.cache_u_;
  3176.         var m = a.cache_u_off - g + i;
  3177.         var n = a.cache_v_;
  3178.         var o = a.cache_v_off - g + i;
  3179.         var p = (d.mb_y_ == 0);
  3180.         var q = (d.mb_y_ >= a.mb_h_ - 1) + 0;
  3181.         var r = MACROBLOCK_VPOS(d.mb_y_);
  3182.         var s = MACROBLOCK_VPOS(d.mb_y_ + 1);
  3183.         if (d.filter_row_) {
  3184.             FilterRow(a)
  3185.         }
  3186.         if (b.put) {
  3187.             if (!p) {
  3188.                 r -= e;
  3189.                 b.y = j;
  3190.                 b.y_off = k;
  3191.                 b.u = l;
  3192.                 b.u_off = m;
  3193.                 b.v = n;
  3194.                 b.v_off = o
  3195.             } else {
  3196.                 b.y = a.cache_y_;
  3197.                 b.y_off = a.cache_y_off + h;
  3198.                 b.u = a.cache_u_;
  3199.                 b.u_off = a.cache_u_off + i;
  3200.                 b.v = a.cache_v_;
  3201.                 b.v_off = a.cache_v_off + i
  3202.             }
  3203.             if (!q) {
  3204.                 s -= e
  3205.             }
  3206.             if (s > b.crop_bottom) {
  3207.                 s = b.crop_bottom
  3208.             }
  3209.             if (a.alpha_data_) {
  3210.                 if (r == 0) {
  3211.                     b.a = VP8DecompressAlphaRows(a, r, s - r);
  3212.                     b.a_off = 0
  3213.                 } else {
  3214.                     b.a_off = VP8DecompressAlphaRows(a, r, s - r)
  3215.                 }
  3216.                 if (b.a == null) {
  3217.                     return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "Could not decode alpha data.")
  3218.                 }
  3219.             }
  3220.             if (r < b.crop_top) {
  3221.                 var t = b.crop_top - r;
  3222.                 r = b.crop_top;
  3223.                 assert(!(t & 1));
  3224.                 b.y_off += a.cache_y_stride_ * t;
  3225.                 b.u_off += a.cache_uv_stride_ * (t >> 1);
  3226.                 b.v_off += a.cache_uv_stride_ * (t >> 1);
  3227.                 if (b.a) {
  3228.                     b.a_off += b.width * t
  3229.                 }
  3230.             }
  3231.             if (r < s) {
  3232.                 b.y_off += b.crop_left;
  3233.                 b.u_off += b.crop_left >> 1;
  3234.                 b.v_off += b.crop_left >> 1;
  3235.                 if (b.a) {
  3236.                     b.a_off += b.crop_left
  3237.                 }
  3238.                 b.mb_y = r - b.crop_top;
  3239.                 b.mb_w = b.crop_right - b.crop_left;
  3240.                 b.mb_h = s - r;
  3241.                 c = b.put(b)
  3242.             }
  3243.         }
  3244.         if (d.id_ + 1 == a.num_caches_) {
  3245.             if (!q) {
  3246.                 memcpy(a.cache_y_, a.cache_y_off - f, j, k + 16 * a.cache_y_stride_, f);
  3247.                 memcpy(a.cache_u_, a.cache_u_off - g, l, m + 8 * a.cache_uv_stride_, g);
  3248.                 memcpy(a.cache_v_, a.cache_v_off - g, n, o + 8 * a.cache_uv_stride_, g)
  3249.             }
  3250.         }
  3251.         return c
  3252.     }
  3253.     function VP8ProcessRow(a, b) {
  3254.         var c = 1;
  3255.         var d = a.thread_ctx_;
  3256.         if (!a.use_threads_) {
  3257.             d.mb_y_ = a.mb_y_;
  3258.             d.filter_row_ = a.filter_row_;
  3259.             c = VP8FinishRow(a, b)
  3260.         } else {
  3261.             var e = a.worker_;
  3262.             c &= WebPWorkerSync(e);
  3263.             assert(e.status_ == OK);
  3264.             if (c) {
  3265.                 d.io_ = b;
  3266.                 d.id_ = a.cache_id_;
  3267.                 d.mb_y_ = a.mb_y_;
  3268.                 d.filter_row_ = a.filter_row_;
  3269.                 if (d.filter_row_) {
  3270.                     var f = d.f_info_;
  3271.                     d.f_info_ = a.f_info_;
  3272.                     a.f_info_ = f
  3273.                 }
  3274.                 WebPWorkerLaunch(e);
  3275.                 if (++a.cache_id_ == a.num_caches_) {
  3276.                     a.cache_id_ = 0
  3277.                 }
  3278.             }
  3279.         }
  3280.         return c
  3281.     }
  3282.     function VP8EnterCritical(a, b) {
  3283.         if (b.setup && !b.setup(b)) {
  3284.             VP8SetError(a, VP8_STATUS_USER_ABORT, "Frame setup failed");
  3285.             return a.status_
  3286.         }
  3287.         if (b.bypass_filtering) {
  3288.             a.filter_type_ = 0
  3289.         } {
  3290.             var c = cf[a.filter_type_];
  3291.             if (a.filter_type_ == 2) {
  3292.                 a.tl_mb_x_ = 0;
  3293.                 a.tl_mb_y_ = 0
  3294.             } else {
  3295.                 a.tl_mb_y_ = b.crop_top >> 4;
  3296.                 a.tl_mb_x_ = b.crop_left >> 4
  3297.             }
  3298.             a.br_mb_y_ = (b.crop_bottom + 15 + c) >> 4;
  3299.             a.br_mb_x_ = (b.crop_right + 15 + c) >> 4;
  3300.             if (a.br_mb_x_ > a.mb_w_) {
  3301.                 a.br_mb_x_ = a.mb_w_
  3302.             }
  3303.             if (a.br_mb_y_ > a.mb_h_) {
  3304.                 a.br_mb_y_ = a.mb_h_
  3305.             }
  3306.         }
  3307.         return T
  3308.     }
  3309.     function VP8ExitCritical(a, b) {
  3310.         var c = 1;
  3311.         if (a.use_threads_) {
  3312.             c = WebPWorkerSync(a.worker_)
  3313.         }
  3314.         if (b.teardown) {
  3315.             b.teardown(b)
  3316.         }
  3317.         return c
  3318.     }
  3319.     var cg = new Array(0 + 0 * bj, 4 + 0 * bj, 8 + 0 * bj, 12 + 0 * bj, 0 + 4 * bj, 4 + 4 * bj, 8 + 4 * bj, 12 + 4 * bj, 0 + 8 * bj, 4 + 8 * bj, 8 + 8 * bj, 12 + 8 * bj, 0 + 12 * bj, 4 + 12 * bj, 8 + 12 * bj, 12 + 12 * bj);
  3320.  
  3321.     function CheckMode(a, b) {
  3322.         if (b == bh) {
  3323.             if (a.mb_x_ == 0) {
  3324.                 return (a.mb_y_ == 0) ? B_DC_PRED_NOTOPLEFT : B_DC_PRED_NOLEFT
  3325.             } else {
  3326.                 return (a.mb_y_ == 0) ? B_DC_PRED_NOTOP : bh
  3327.             }
  3328.         }
  3329.         return b
  3330.     }
  3331.     function Copy32b(a, b, c, d) {
  3332.         for (i = 0; i < 4; ++i) a[b + i] = c[d + i]
  3333.     }
  3334.     function VP8ReconstructBlock(a) {
  3335.         var b = a.yuv_b_;
  3336.         var c = bm;
  3337.         var d = a.yuv_b_;
  3338.         var e = bn;
  3339.         var f = a.yuv_b_;
  3340.         var g = bo;
  3341.         if (a.mb_x_ > 0) {
  3342.             var j;
  3343.             for (j = -1; j < 16; ++j) {
  3344.                 Copy32b(b, (c + j * bj - 4), b, (c + j * bj + 12))
  3345.             }
  3346.             for (j = -1; j < 8; ++j) {
  3347.                 Copy32b(d, (e + j * bj - 4), d, (e + j * bj + 4));
  3348.                 Copy32b(f, (g + j * bj - 4), f, (g + j * bj + 4))
  3349.             }
  3350.         } else {
  3351.             var j;
  3352.             for (j = 0; j < 16; ++j) {
  3353.                 b[c + j * bj - 1] = 129
  3354.             }
  3355.             for (j = 0; j < 8; ++j) {
  3356.                 d[e + j * bj - 1] = 129;
  3357.                 f[g + j * bj - 1] = 129
  3358.             }
  3359.             if (a.mb_y_ > 0) {
  3360.                 b[c - 1 - bj] = d[e - 1 - bj] = f[g - 1 - bj] = 129
  3361.             }
  3362.         } {
  3363.             var h = a.y_t_;
  3364.             var k = +a.mb_x_ * 16;
  3365.             var l = a.u_t_;
  3366.             var m = +a.mb_x_ * 8;
  3367.             var o = a.v_t_;
  3368.             var p = +a.mb_x_ * 8;
  3369.             var q = a.coeffs_;
  3370.             var n;
  3371.             if (a.mb_y_ > 0) {
  3372.                 memcpy(b, c - bj, h, k, 16);
  3373.                 memcpy(d, e - bj, l, m, 8);
  3374.                 memcpy(f, g - bj, o, p, 8)
  3375.             } else if (a.mb_x_ == 0) {
  3376.                 for (i = 0; i < (16 + 4 + 1); ++i) b[c - bj - 1 + i] = 127;
  3377.                 for (i = 0; i < (8 + 1); ++i) d[e - bj - 1 + i] = 127;
  3378.                 for (i = 0; i < (8 + 1); ++i) f[g - bj - 1 + i] = 127
  3379.             }
  3380.             if (a.is_i4x4_) {
  3381.                 var r = b;
  3382.                 var s = c - bj + 16;
  3383.                 if (a.mb_y_ > 0) {
  3384.                     if (a.mb_x_ >= a.mb_w_ - 1) {
  3385.                         r[s + 0] = r[s + 1] = r[s + 2] = r[s + 3] = h[k + 15]
  3386.                     } else {
  3387.                         memcpy(r, s + 0, h, k + 16, 4)
  3388.                     }
  3389.                 }
  3390.                 for (ii = 0; ii < 4; ++ii) r[ii + s + bj * 4] = r[ii + s + 1 * bj * 4] = r[ii + s + 2 * bj * 4] = r[ii + s + 3 * bj * 4] = r[ii + s + 0 * 4];
  3391.                 for (n = 0; n < 16; n++) {
  3392.                     var t = b;
  3393.                     var u = c + cg[n];
  3394.                     bJ[a.imodes_[n]](t, u);
  3395.                     if (a.non_zero_ac_ & (1 << n)) {
  3396.                         bM(q, +n * 16, t, u, 0)
  3397.                     } else if (a.non_zero_ & (1 << n)) {
  3398.                         bO(q, +n * 16, t, u)
  3399.                     }
  3400.                 }
  3401.             } else {
  3402.                 var v = CheckMode(a, a.imodes_[0]);
  3403.                 bK[v](b, c);
  3404.                 if (a.non_zero_) {
  3405.                     for (n = 0; n < 16; n++) {
  3406.                         var t = b;
  3407.                         var u = c + cg[n];
  3408.                         if (a.non_zero_ac_ & (1 << n)) {
  3409.                             bM(q, +n * 16, t, u, 0)
  3410.                         } else if (a.non_zero_ & (1 << n)) {
  3411.                             bO(q, +n * 16, t, u)
  3412.                         }
  3413.                     }
  3414.                 }
  3415.             } {
  3416.                 var v = CheckMode(a, a.uvmode_);
  3417.                 bL[v](d, e);
  3418.                 bL[v](f, g);
  3419.                 if (a.non_zero_ & 0x0f0000) {
  3420.                     var w = a.coeffs_;
  3421.                     var x = 16 * 16;
  3422.                     if (a.non_zero_ac_ & 0x0f0000) {
  3423.                         bN(w, x, d, e)
  3424.                     } else {
  3425.                         bP(w, x, d, e)
  3426.                     }
  3427.                 }
  3428.                 if (a.non_zero_ & 0xf00000) {
  3429.                     var y = a.coeffs_;
  3430.                     var x = 20 * 16;
  3431.                     if (a.non_zero_ac_ & 0xf00000) {
  3432.                         bN(y, x, f, g)
  3433.                     } else {
  3434.                         bP(y, x, f, g)
  3435.                     }
  3436.                 }
  3437.                 if (a.mb_y_ < (a.mb_h_ - 1)) {
  3438.                     memcpy(h, k, b, c + 15 * bj, 16);
  3439.                     memcpy(l, m, d, e + 7 * bj, 8);
  3440.                     memcpy(o, p, f, g + 7 * bj, 8)
  3441.                 }
  3442.             }
  3443.         }
  3444.     }
  3445.     function clip(v, M) {
  3446.         return v < 0 ? 0 : v > M ? M : v
  3447.     }
  3448.     var ci = new Array(4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157);
  3449.     var cj = new Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284);
  3450.  
  3451.     function VP8ParseQuant(a) {
  3452.         var b = a.br_;
  3453.         var c = VP8GetValue(b, 7);
  3454.         var d = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  3455.         var e = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  3456.         var f = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  3457.         var g = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  3458.         var h = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  3459.         var j = a.segment_hdr_;
  3460.         var i = int;
  3461.         for (i = 0; i < NUM_MB_SEGMENTS; ++i) {
  3462.             var q = int;
  3463.             if (j.use_segment_) {
  3464.                 q = j.quantizer_[i];
  3465.                 if (!j.absolute_delta_) {
  3466.                     q += c
  3467.                 }
  3468.             } else {
  3469.                 if (i > 0) {
  3470.                     a.dqm_[i] = a.dqm_[0];
  3471.                     continue
  3472.                 } else {
  3473.                     q = c
  3474.                 }
  3475.             } {
  3476.                 var m = a.dqm_[i];
  3477.                 m.y1_mat_[0] = ci[clip(q + d, 127)];
  3478.                 m.y1_mat_[1] = cj[clip(q + 0, 127)];
  3479.                 m.y2_mat_[0] = ci[clip(q + e, 127)] * 2;
  3480.                 m.y2_mat_[1] = parseInt(cj[clip(q + f, 127)] * 155 / 100);
  3481.                 if (m.y2_mat_[1] < 8) m.y2_mat_[1] = 8;
  3482.                 m.uv_mat_[0] = ci[clip(q + g, 117)];
  3483.                 m.uv_mat_[1] = cj[clip(q + h, 127)]
  3484.             }
  3485.         }
  3486.     }
  3487.     var ck = new Array(-bh, 1, -B_TM_PRED, 2, -B_VE_PRED, 3, 4, 6, -B_HE_PRED, 5, -B_RD_PRED, -B_VR_PRED, -B_LD_PRED, 7, -B_VL_PRED, 8, -B_HD_PRED, -B_HU_PRED);
  3488.     var cl = new Array(new Array(new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128), new Array(189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128), new Array(106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128)), new Array(new Array(1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128), new Array(181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128), new Array(78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128)), new Array(new Array(1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128), new Array(184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128), new Array(77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128)), new Array(new Array(1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128), new Array(170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128), new Array(37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128)), new Array(new Array(1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128), new Array(207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128), new Array(102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128)), new Array(new Array(1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128), new Array(177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128), new Array(80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62), new Array(131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1), new Array(68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128)), new Array(new Array(1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128), new Array(184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128), new Array(81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128)), new Array(new Array(1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128), new Array(99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128), new Array(23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128)), new Array(new Array(1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128), new Array(109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128), new Array(44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128)), new Array(new Array(1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128), new Array(94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128), new Array(22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128)), new Array(new Array(1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128), new Array(124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128), new Array(35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128)), new Array(new Array(1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128), new Array(121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128), new Array(45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128)), new Array(new Array(1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128), new Array(203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128))), new Array(new Array(new Array(253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128), new Array(175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128), new Array(73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128)), new Array(new Array(1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128), new Array(239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128), new Array(155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128)), new Array(new Array(1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128), new Array(201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128), new Array(69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128)), new Array(new Array(1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128), new Array(223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128), new Array(141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128), new Array(149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128), new Array(213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128), new Array(55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255), new Array(126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128), new Array(61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128)), new Array(new Array(1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128), new Array(166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128), new Array(39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128)), new Array(new Array(1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128), new Array(124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128), new Array(24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128)), new Array(new Array(1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128), new Array(149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128), new Array(28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128)), new Array(new Array(1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128), new Array(123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128), new Array(20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128)), new Array(new Array(1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128), new Array(168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128), new Array(47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128)), new Array(new Array(1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128), new Array(141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128), new Array(42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128))));
  3489.     var cm = new Array(new Array(new Array(231, 120, 48, 89, 115, 113, 120, 152, 112), new Array(152, 179, 64, 126, 170, 118, 46, 70, 95), new Array(175, 69, 143, 80, 85, 82, 72, 155, 103), new Array(56, 58, 10, 171, 218, 189, 17, 13, 152), new Array(114, 26, 17, 163, 44, 195, 21, 10, 173), new Array(121, 24, 80, 195, 26, 62, 44, 64, 85), new Array(144, 71, 10, 38, 171, 213, 144, 34, 26), new Array(170, 46, 55, 19, 136, 160, 33, 206, 71), new Array(63, 20, 8, 114, 114, 208, 12, 9, 226), new Array(81, 40, 11, 96, 182, 84, 29, 16, 36)), new Array(new Array(134, 183, 89, 137, 98, 101, 106, 165, 148), new Array(72, 187, 100, 130, 157, 111, 32, 75, 80), new Array(66, 102, 167, 99, 74, 62, 40, 234, 128), new Array(41, 53, 9, 178, 241, 141, 26, 8, 107), new Array(74, 43, 26, 146, 73, 166, 49, 23, 157), new Array(65, 38, 105, 160, 51, 52, 31, 115, 128), new Array(104, 79, 12, 27, 217, 255, 87, 17, 7), new Array(87, 68, 71, 44, 114, 51, 15, 186, 23), new Array(47, 41, 14, 110, 182, 183, 21, 17, 194), new Array(66, 45, 25, 102, 197, 189, 23, 18, 22)), new Array(new Array(88, 88, 147, 150, 42, 46, 45, 196, 205), new Array(43, 97, 183, 117, 85, 38, 35, 179, 61), new Array(39, 53, 200, 87, 26, 21, 43, 232, 171), new Array(56, 34, 51, 104, 114, 102, 29, 93, 77), new Array(39, 28, 85, 171, 58, 165, 90, 98, 64), new Array(34, 22, 116, 206, 23, 34, 43, 166, 73), new Array(107, 54, 32, 26, 51, 1, 81, 43, 31), new Array(68, 25, 106, 22, 64, 171, 36, 225, 114), new Array(34, 19, 21, 102, 132, 188, 16, 76, 124), new Array(62, 18, 78, 95, 85, 57, 50, 48, 51)), new Array(new Array(193, 101, 35, 159, 215, 111, 89, 46, 111), new Array(60, 148, 31, 172, 219, 228, 21, 18, 111), new Array(112, 113, 77, 85, 179, 255, 38, 120, 114), new Array(40, 42, 1, 196, 245, 209, 10, 25, 109), new Array(88, 43, 29, 140, 166, 213, 37, 43, 154), new Array(61, 63, 30, 155, 67, 45, 68, 1, 209), new Array(100, 80, 8, 43, 154, 1, 51, 26, 71), new Array(142, 78, 78, 16, 255, 128, 34, 197, 171), new Array(41, 40, 5, 102, 211, 183, 4, 1, 221), new Array(51, 50, 17, 168, 209, 192, 23, 25, 82)), new Array(new Array(138, 31, 36, 171, 27, 166, 38, 44, 229), new Array(67, 87, 58, 169, 82, 115, 26, 59, 179), new Array(63, 59, 90, 180, 59, 166, 93, 73, 154), new Array(40, 40, 21, 116, 143, 209, 34, 39, 175), new Array(47, 15, 16, 183, 34, 223, 49, 45, 183), new Array(46, 17, 33, 183, 6, 98, 15, 32, 183), new Array(57, 46, 22, 24, 128, 1, 54, 17, 37), new Array(65, 32, 73, 115, 28, 128, 23, 128, 205), new Array(40, 3, 9, 115, 51, 192, 18, 6, 223), new Array(87, 37, 9, 115, 59, 77, 64, 21, 47)), new Array(new Array(104, 55, 44, 218, 9, 54, 53, 130, 226), new Array(64, 90, 70, 205, 40, 41, 23, 26, 57), new Array(54, 57, 112, 184, 5, 41, 38, 166, 213), new Array(30, 34, 26, 133, 152, 116, 10, 32, 134), new Array(39, 19, 53, 221, 26, 114, 32, 73, 255), new Array(31, 9, 65, 234, 2, 15, 1, 118, 73), new Array(75, 32, 12, 51, 192, 255, 160, 43, 51), new Array(88, 31, 35, 67, 102, 85, 55, 186, 85), new Array(56, 21, 23, 111, 59, 205, 45, 37, 192), new Array(55, 38, 70, 124, 73, 102, 1, 34, 98)), new Array(new Array(125, 98, 42, 88, 104, 85, 117, 175, 82), new Array(95, 84, 53, 89, 128, 100, 113, 101, 45), new Array(75, 79, 123, 47, 51, 128, 81, 171, 1), new Array(57, 17, 5, 71, 102, 57, 53, 41, 49), new Array(38, 33, 13, 121, 57, 73, 26, 1, 85), new Array(41, 10, 67, 138, 77, 110, 90, 47, 114), new Array(115, 21, 2, 10, 102, 255, 166, 23, 6), new Array(101, 29, 16, 10, 85, 128, 101, 196, 26), new Array(57, 18, 10, 102, 102, 213, 34, 20, 43), new Array(117, 20, 15, 36, 163, 128, 68, 1, 26)), new Array(new Array(102, 61, 71, 37, 34, 53, 31, 243, 192), new Array(69, 60, 71, 38, 73, 119, 28, 222, 37), new Array(68, 45, 128, 34, 1, 47, 11, 245, 171), new Array(62, 17, 19, 70, 146, 85, 55, 62, 70), new Array(37, 43, 37, 154, 100, 163, 85, 160, 1), new Array(63, 9, 92, 136, 28, 64, 32, 201, 85), new Array(75, 15, 9, 9, 64, 255, 184, 119, 16), new Array(86, 6, 28, 5, 64, 255, 25, 248, 1), new Array(56, 8, 17, 132, 137, 255, 55, 116, 128), new Array(58, 15, 20, 82, 135, 57, 26, 121, 40)), new Array(new Array(164, 50, 31, 137, 154, 133, 25, 35, 218), new Array(51, 103, 44, 131, 131, 123, 31, 6, 158), new Array(86, 40, 64, 135, 148, 224, 45, 183, 128), new Array(22, 26, 17, 131, 240, 154, 14, 1, 209), new Array(45, 16, 21, 91, 64, 222, 7, 1, 197), new Array(56, 21, 39, 155, 60, 138, 23, 102, 213), new Array(83, 12, 13, 54, 192, 255, 68, 47, 28), new Array(85, 26, 85, 85, 128, 128, 32, 146, 171), new Array(18, 11, 7, 63, 144, 171, 4, 4, 246), new Array(35, 27, 10, 146, 174, 171, 12, 26, 128)), new Array(new Array(190, 80, 35, 99, 180, 80, 126, 54, 45), new Array(85, 126, 47, 87, 176, 51, 41, 20, 32), new Array(101, 75, 128, 139, 118, 146, 116, 128, 85), new Array(56, 41, 15, 176, 236, 85, 37, 9, 62), new Array(71, 30, 17, 119, 118, 255, 17, 18, 138), new Array(101, 38, 60, 138, 55, 70, 43, 26, 142), new Array(146, 36, 19, 30, 171, 255, 97, 27, 20), new Array(138, 45, 61, 62, 219, 1, 81, 188, 64), new Array(32, 41, 20, 117, 151, 142, 20, 21, 163), new Array(112, 19, 12, 61, 195, 128, 48, 4, 24)));
  3490.  
  3491.     function VP8ResetProba(a) {
  3492.         for (i = 0; i < a.segments_.length; ++i) a.segments_[i] = 255;
  3493.         a.coeffs_ = newObjectIt(cl)
  3494.     }
  3495.     function VP8ParseIntraMode(a, b) {
  3496.         var c = b.intra_t_;
  3497.         c[c.length - 1] = 0 + 4 * b.mb_x_;
  3498.         var d = b.intra_l_;
  3499.         b.is_i4x4_ = !VP8GetBit(a, 145);
  3500.         if (!b.is_i4x4_) {
  3501.             var e = VP8GetBit(a, 156) ? (VP8GetBit(a, 128) ? TM_PRED : H_PRED) : (VP8GetBit(a, 163) ? V_PRED : DC_PRED);
  3502.             b.imodes_[0] = e;
  3503.             for (i = 0; i < 4; ++i) c[i + c[c.length - 1]] = e;
  3504.             for (i = 0; i < 4; ++i) d[i] = e
  3505.         } else {
  3506.             var f = b.imodes_;
  3507.             var g = 0;
  3508.             var y;
  3509.             for (y = 0; y < 4; ++y) {
  3510.                 var e = d[y];
  3511.                 var x;
  3512.                 for (x = 0; x < 4; ++x) {
  3513.                     var h = cm[c[c[c.length - 1] + x]][e];
  3514.                     var i = 0;
  3515.                     do {
  3516.                         i = ck[2 * i + VP8GetBit(a, h[i])]
  3517.                     } while (i > 0);
  3518.                     e = -i;
  3519.                     c[c[c.length - 1] + x] = e;
  3520.                     f[g] = e;
  3521.                     g++
  3522.                 }
  3523.                 d[y] = e
  3524.             }
  3525.         }
  3526.         b.uvmode_ = !VP8GetBit(a, 142) ? DC_PRED : !VP8GetBit(a, 114) ? V_PRED : VP8GetBit(a, 183) ? TM_PRED : H_PRED
  3527.     }
  3528.     var cn = new Array(new Array(new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255), new Array(250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255), new Array(234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255), new Array(251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))));
  3529.  
  3530.     function VP8ParseProba(a, d) {
  3531.         var e = d.proba_;
  3532.         var t, b, c, p;
  3533.         for (t = 0; t < NUM_TYPES; ++t) {
  3534.             for (b = 0; b < NUM_BANDS; ++b) {
  3535.                 for (c = 0; c < NUM_CTX; ++c) {
  3536.                     for (p = 0; p < NUM_PROBAS; ++p) {
  3537.                         if (VP8GetBit(a, cn[t][b][c][p])) {
  3538.                             e.coeffs_[t][b][c][p] = VP8GetValue(a, 8)
  3539.                         }
  3540.                     }
  3541.                 }
  3542.             }
  3543.         }
  3544.         d.use_skip_proba_ = VP8Get(a);
  3545.         if (d.use_skip_proba_) {
  3546.             d.skip_p_ = VP8GetValue(a, 8)
  3547.         }
  3548.     }
  3549.     var co = 12;
  3550.     var cp = 20;
  3551.     this.WebPGetDecoderVersion = function (a) {
  3552.         return (be << 16) | (bf << 8) | bg
  3553.     };
  3554.  
  3555.     function SetOk(a) {
  3556.         a.status_ = 'VP8_STATUS_OK';
  3557.         a.error_msg_ = "OK"
  3558.     }
  3559.     var cq;
  3560.  
  3561.     function VP8InitIoInternal(a, b) {
  3562.         if (b != N) {
  3563.             alert('mismatch error');
  3564.             return 0
  3565.         }
  3566.         if (a) {}
  3567.         return 1
  3568.     }
  3569.     var cr;
  3570.  
  3571.     function VP8New(a) {
  3572.         var b = newObjectIt(bz);
  3573.         if (b) {
  3574.             SetOk(b);
  3575.             b.ready_ = 0
  3576.         }
  3577.         return b
  3578.     }
  3579.     function VP8Delete(a) {
  3580.         if (a) {
  3581.             VP8Clear(a);
  3582.             a = 0
  3583.         }
  3584.     }
  3585.     function VP8SetError(a, b, c) {
  3586.         a.status_ = b;
  3587.         a.error_msg_ = c;
  3588.         a.ready_ = 0;
  3589.         alert(b + ': ' + c);
  3590.         return 0
  3591.     }
  3592.     function get_le32(a, b) {
  3593.         return a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16) | (a[b + 3] << 24)
  3594.     }
  3595.     function VP8CheckAndSkipHeader(a, b, c, d, e, f) {
  3596.         if (!a || !c || !d || !e) {
  3597.             return 0
  3598.         }
  3599.         if (c.value >= 8) {
  3600.             if (!memcmp(a, b.value, "VP8 ", 4)) {
  3601.                 d.value = 1;
  3602.                 e.value = get_le32(a, b.value + 4);
  3603.                 if ((f.value >= co) && (e.value > f.value - co)) {
  3604.                     return 0
  3605.                 }
  3606.                 b.value += 8;
  3607.                 c.value -= 8
  3608.             } else {
  3609.                 d.value = 0;
  3610.                 e.value = 0
  3611.             }
  3612.         } else {
  3613.             d.value = -1;
  3614.             e.value = 0
  3615.         }
  3616.         return 1
  3617.     }
  3618.     function VP8GetInfo(a, b, c, d, e, f, g) {
  3619.         if (c.value < 10) {
  3620.             return 0
  3621.         }
  3622.         if (a[b.value + 3] != 0x9d || a[b.value + 4] != 0x01 || a[b.value + 5] != 0x2a) {
  3623.             return 0
  3624.         } else {
  3625.             var i = a[b.value + 0] | (a[b.value + 1] << 8) | (a[b.value + 2] << 16);
  3626.             var j = !(i & 1) + 0;
  3627.             var w = ((a[b.value + 7] << 8) | a[b.value + 6]) & 0x3fff;
  3628.             var h = ((a[b.value + 9] << 8) | a[b.value + 8]) & 0x3fff;
  3629.             if (g) {
  3630.                 if (c.value < 11) return 0;
  3631.                 g.value = !! (a[b.value + 10] & 0x80)
  3632.             }
  3633.             if (!j) {
  3634.                 return 0
  3635.             }
  3636.             if (((i >> 1) & 7) > 3) {
  3637.                 return 0
  3638.             }
  3639.             if (!((i >> 4) & 1)) {
  3640.                 return 0
  3641.             }
  3642.             if (((i >> 5)) >= d) {
  3643.                 return 0
  3644.             }
  3645.             if (e) {
  3646.                 e.value = w
  3647.             }
  3648.             if (f) {
  3649.                 f.value = h
  3650.             }
  3651.             return 1
  3652.         }
  3653.     }
  3654.     function VP8XGetInfo(a, b, c, d, e, f, g) {
  3655.         if (!a || !c || !d) {
  3656.             return 0
  3657.         }
  3658.         if (c.value >= cp) {
  3659.             if (!memcmp(a, b.value, "VP8X", 4)) {
  3660.                 var h = get_le32(a, b.value + 4);
  3661.                 d.value = 1;
  3662.                 if (h.value != (cp - 8)) {
  3663.                     return 0
  3664.                 }
  3665.                 if (g) {
  3666.                     g.value = get_le32(a, b.value + 8)
  3667.                 }
  3668.                 if (e) {
  3669.                     e.value = get_le32(a, b.value + 12)
  3670.                 }
  3671.                 if (f) {
  3672.                     f.value = get_le32(a, b.value + 16)
  3673.                 }
  3674.                 b.value += cp;
  3675.                 c.value -= cp
  3676.             } else {
  3677.                 d.value = 0
  3678.             }
  3679.         } else {
  3680.             d.value = -1
  3681.         }
  3682.         return 1
  3683.     }
  3684.     function ResetSegmentHeader(a) {
  3685.         assert(a);
  3686.         a.use_segment_ = 0;
  3687.         a.update_map_ = 0;
  3688.         a.absolute_delta_ = 1;
  3689.         for (i = 0; i < a.quantizer_.length; ++i) a.quantizer_[i] = 0;
  3690.         for (i = 0; i < a.filter_strength_.length; ++i) a.filter_strength_[i] = 0
  3691.     }
  3692.     function ParseSegmentHeader(a, b, c) {
  3693.         assert(a);
  3694.         assert(b);
  3695.         b.use_segment_ = VP8Get(a);
  3696.         if (b.use_segment_) {
  3697.             b.update_map_ = VP8Get(a);
  3698.             if (VP8Get(a)) {
  3699.                 var s;
  3700.                 b.absolute_delta_ = VP8Get(a);
  3701.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  3702.                     b.quantizer_[s] = VP8Get(a) ? VP8GetSignedValue(a, 7) : 0
  3703.                 }
  3704.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  3705.                     b.filter_strength_[s] = VP8Get(a) ? VP8GetSignedValue(a, 6) : 0
  3706.                 }
  3707.             }
  3708.             if (b.update_map_) {
  3709.                 var s;
  3710.                 for (s = 0; s < bi; ++s) {
  3711.                     c.segments_[s] = VP8Get(a) ? VP8GetValue(a, 8) : 255
  3712.                 }
  3713.             }
  3714.         } else {
  3715.             b.update_map_ = 0
  3716.         }
  3717.         return !a.eof_
  3718.     }
  3719.     function ParsePartitions(a, b, c, d) {
  3720.         var e = a.br_;
  3721.         var f = b;
  3722.         var g = c;
  3723.         var h = b,
  3724.             buf_end_off = c + d;
  3725.         var i;
  3726.         var j = 0;
  3727.         var k = int;
  3728.         var p = int;
  3729.         a.num_parts_ = 1 << VP8GetValue(e, 2);
  3730.         k = a.num_parts_ - 1;
  3731.         i = b;
  3732.         var j = c + k * 3;
  3733.         if (buf_end_off < j) {
  3734.             return 'VP8_STATUS_NOT_ENOUGH_DATA'
  3735.         }
  3736.         for (p = 0; p < k; ++p) {
  3737.             var l = f[g + 0] | (f[g + 1] << 8) | (f[g + 2] << 16);
  3738.             var m = i;
  3739.             var n = j + l;
  3740.             if (n > buf_end_off) m = h;
  3741.             VP8InitBitReader(a.parts_[+p], i, j, n);
  3742.             i = m;
  3743.             j = n;
  3744.             g += 3
  3745.         }
  3746.         VP8InitBitReader(a.parts_[+k], i, j, buf_end_off);
  3747.         return (j < buf_end_off) ? 'VP8_STATUS_OK' : 'VP8_STATUS_SUSPENDED'
  3748.     }
  3749.     function ParseFilterHeader(a, b) {
  3750.         var c = b.filter_hdr_;
  3751.         c.simple_ = VP8Get(a);
  3752.         c.level_ = VP8GetValue(a, 6);
  3753.         c.sharpness_ = VP8GetValue(a, 3);
  3754.         c.use_lf_delta_ = VP8Get(a);
  3755.         if (c.use_lf_delta_) {
  3756.             if (VP8Get(a)) {
  3757.                 var i;
  3758.                 for (i = 0; i < NUM_REF_LF_DELTAS; ++i) {
  3759.                     if (VP8Get(a)) {
  3760.                         c.ref_lf_delta_[i] = VP8GetSignedValue(a, 6)
  3761.                     }
  3762.                 }
  3763.                 for (i = 0; i < NUM_MODE_LF_DELTAS; ++i) {
  3764.                     if (VP8Get(a)) {
  3765.                         c.mode_lf_delta_[i] = VP8GetSignedValue(a, 6)
  3766.                     }
  3767.                 }
  3768.             }
  3769.         }
  3770.         b.filter_type_ = (c.level_ == 0) ? 0 : c.simple_ ? 1 : 2;
  3771.         if (b.filter_type_ > 0) {
  3772.             if (b.segment_hdr_.use_segment_) {
  3773.                 var s;
  3774.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  3775.                     var d = b.segment_hdr_.filter_strength_[s];
  3776.                     if (!b.segment_hdr_.absolute_delta_) {
  3777.                         d += c.level_
  3778.                     }
  3779.                     b.filter_levels_[s] = d
  3780.                 }
  3781.             } else {
  3782.                 b.filter_levels_[0] = c.level_
  3783.             }
  3784.         }
  3785.         return !a.eof_
  3786.     }
  3787.     var cs, buf, buf_size;
  3788.     var ct;
  3789.  
  3790.     function VP8GetHeaders(a, b) {
  3791.         var c = {
  3792.             value: 0
  3793.         };
  3794.         var d = uint8_t;
  3795.         var e = {
  3796.             value: uint32_t
  3797.         };
  3798.         var f = {
  3799.             value: uint32_t
  3800.         };
  3801.         var g = {
  3802.             value: uint32_t
  3803.         };
  3804.         var h = {
  3805.             value: 0
  3806.         };
  3807.         var i = {
  3808.             value: 0
  3809.         };
  3810.         var j = newObjectIt(bp);
  3811.         var k = newObjectIt(bq);
  3812.         var l = newObjectIt(bb);
  3813.         var m = 'VP8StatusCode';
  3814.         if (a == null) {
  3815.             alert('(dec == null)');
  3816.             return 0
  3817.         }
  3818.         SetOk(a);
  3819.         if (b == null) {
  3820.             return VP8SetError(a, 'VP8_STATUS_INVALID_PARAM', "null VP8Io passed to VP8GetHeaders()")
  3821.         }
  3822.         d = b.data;
  3823.         c.value = b.data_off;
  3824.         e.value = b.data_size;
  3825.         if (d == null || e.value <= 4) {
  3826.             return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "Not enough data to parse frame header")
  3827.         }
  3828.         if (!WebPCheckAndSkipRIFFHeader(d, c, e, f)) {
  3829.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Invalid RIFF container")
  3830.         }
  3831.         if (!VP8XGetInfo(d, c, e, h, null, null, null)) {
  3832.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Invalid VP8X container")
  3833.         }
  3834.         if (!VP8CheckAndSkipHeader(d, c, e, i, g, f)) {
  3835.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Inconsistent size information.")
  3836.         }
  3837.         if (i.value == -1) {
  3838.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "RIFF: Inconsistent size information.")
  3839.         }
  3840.         if (e.value < 4) {
  3841.             return VP8SetError(a, VP8_STATUS_NOT_ENOUGH_DATA, "RIFF: Truncated header.")
  3842.         }
  3843.         c = c.value;
  3844.         e = e.value; {
  3845.             var n = d[c + 0] | (d[c + 1] << 8) | (d[c + 2] << 16);
  3846.             j = a.frm_hdr_;
  3847.             j.key_frame_ = !(n & 1) + 0;
  3848.             j.profile_ = (n >> 1) & 7;
  3849.             j.show_ = (n >> 4) & 1;
  3850.             j.partition_length_ = (n >> 5);
  3851.             if (j.profile_ > 3) return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "Incorrect keyframe parameters.");
  3852.             if (!j.show_) return VP8SetError(a, 'VP8_STATUS_UNSUPPORTED_FEATURE', "Frame not displayable.");
  3853.             c += 3;
  3854.             e -= 3
  3855.         }
  3856.         k = a.pic_hdr_;
  3857.         if (j.key_frame_) {
  3858.             if (e < 7) {
  3859.                 return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "cannot parse picture header")
  3860.             }
  3861.             if (Byte2Hex(d[c + 0]) != 0x9d || Byte2Hex(d[c + 1]) != 0x01 || Byte2Hex(d[c + 2]) != 0x2a) {
  3862.                 return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "Bad code word")
  3863.             }
  3864.             k.width_ = ((d[c + 4] << 8) | d[c + 3]) & 0x3fff;
  3865.             k.xscale_ = d[c + 4] >> 6;
  3866.             k.height_ = ((d[c + 6] << 8) | d[c + 5]) & 0x3fff;
  3867.             k.yscale_ = d[c + 6] >> 6;
  3868.             c += 7;
  3869.             e -= 7;
  3870.             a.mb_w_ = (k.width_ + 15) >> 4;
  3871.             a.mb_h_ = (k.height_ + 15) >> 4;
  3872.             b.width = k.width_;
  3873.             b.height = k.height_;
  3874.             b.use_scaling = 0;
  3875.             b.use_cropping = 0;
  3876.             b.crop_top = 0;
  3877.             b.crop_left = 0;
  3878.             b.crop_right = b.width;
  3879.             b.crop_bottom = b.height;
  3880.             b.mb_w = b.width;
  3881.             b.mb_h = b.height;
  3882.             VP8ResetProba(a.proba_);
  3883.             ResetSegmentHeader(a.segment_hdr_);
  3884.             a.segment_ = 0
  3885.         }
  3886.         if (j.partition_length_ > e) {
  3887.             return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "bad partition length")
  3888.         }
  3889.         a.alpha_data_ = null;
  3890.         a.alpha_data_size_ = 0;
  3891.         var l = a.br_;
  3892.         VP8InitBitReader(l, d, c, c + j.partition_length_);
  3893.         c += j.partition_length_;
  3894.         e -= j.partition_length_;
  3895.         if (j.key_frame_) {
  3896.             k.colorspace_ = VP8Get(l);
  3897.             k.clamp_type_ = VP8Get(l)
  3898.         }
  3899.         if (!ParseSegmentHeader(l, a.segment_hdr_, a.proba_)) {
  3900.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse segment header")
  3901.         }
  3902.         if (!ParseFilterHeader(l, a)) {
  3903.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse filter header")
  3904.         }
  3905.         m = ParsePartitions(a, d, c, e);
  3906.         if (m != 'VP8_STATUS_OK') {
  3907.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse partitions")
  3908.         }
  3909.         VP8ParseQuant(a);
  3910.         if (!j.key_frame_) {
  3911.             return VP8SetError(a, VP8_STATUS_UNSUPPORTED_FEATURE, "Not a key frame.")
  3912.         } else {
  3913.             a.buffer_flags_ = 0x003 | 0x100
  3914.         }
  3915.         VP8Get(l);
  3916.         VP8ParseProba(l, a);
  3917.         if (a.pic_hdr_.colorspace_) {
  3918.             var o = 8;
  3919.             var p = 0x01;
  3920.             var q = d;
  3921.             ext_buf_off = c - o;
  3922.             var r = size_t;
  3923.             if (j.partition_length_ < o || q[ext_buf_off + o - 1] != p) {}
  3924.             r = (q[ext_buf_off + 4] << 0) | (q[ext_buf_off + 5] << 8) | (q[ext_buf_off + 6] << 16);
  3925.             if (j.partition_length_ < r + o) {
  3926.                 return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Inconsistent extra information.")
  3927.             }
  3928.             a.alpha_data_ = (r > 0) ? q : null;
  3929.             a.alpha_data_off = (r > 0) ? ext_buf_off - r : null;
  3930.             a.alpha_data_size_ = r;
  3931.             r = (q[ext_buf_off + 0] << 0) | (q[ext_buf_off + 1] << 8) | (q[ext_buf_off + 2] << 16);
  3932.             a.layer_data_size_ = r;
  3933.             a.layer_data_ = null;
  3934.             a.layer_colorspace_ = q[ext_buf_off + 3]
  3935.         }
  3936.         a.ready_ = 1;
  3937.         return 1
  3938.     }
  3939.     var cu = new Array(0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0);
  3940.     var cv = new Array(173, 148, 140, 0);
  3941.     var cw = new Array(176, 155, 140, 135, 0);
  3942.     var cx = new Array(180, 157, 141, 134, 130, 0);
  3943.     var cy = new Array(254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0);
  3944.     var cz = new Array(cv, cw, cx, cy);
  3945.     var cA = new Array(0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15);
  3946.     var cB = ArrM(new Array(NUM_CTX, NUM_PROBAS), '');
  3947.  
  3948.     function GetCoeffs(a, b, c, d, n, e) {
  3949.         var p = b[cu[n]][c];
  3950.         if (!VP8GetBit(a, p[0])) {
  3951.             return 0
  3952.         }
  3953.         while (1) {
  3954.             ++n;
  3955.             if (!VP8GetBit(a, p[1])) {
  3956.                 p = b[cu[n]][0]
  3957.             } else {
  3958.                 var v, j;
  3959.                 if (!VP8GetBit(a, p[2])) {
  3960.                     p = b[cu[n]][1];
  3961.                     v = 1
  3962.                 } else {
  3963.                     if (!VP8GetBit(a, p[3])) {
  3964.                         if (!VP8GetBit(a, p[4])) {
  3965.                             v = 2
  3966.                         } else {
  3967.                             v = 3 + VP8GetBit(a, p[5])
  3968.                         }
  3969.                     } else {
  3970.                         if (!VP8GetBit(a, p[6])) {
  3971.                             if (!VP8GetBit(a, p[7])) {
  3972.                                 v = 5 + VP8GetBit(a, 159)
  3973.                             } else {
  3974.                                 v = 7 + 2 * VP8GetBit(a, 165);
  3975.                                 v += VP8GetBit(a, 145)
  3976.                             }
  3977.                         } else {
  3978.                             var f = uint8_t;
  3979.                             var g = VP8GetBit(a, p[8]);
  3980.                             var h = VP8GetBit(a, p[9 + g]);
  3981.                             var k = 2 * g + h;
  3982.                             v = 0;
  3983.                             f = cz[k];
  3984.                             var l;
  3985.                             for (i = 0; i < (f.length - 1); ++i) {
  3986.                                 v += v + VP8GetBit(a, f[i])
  3987.                             }
  3988.                             v += 3 + (8 << k)
  3989.                         }
  3990.                     }
  3991.                     p = b[cu[n]][2]
  3992.                 }
  3993.                 j = cA[n - 1];
  3994.                 e[e[e.length - 1] + j] = VP8GetSigned(a, v) * d[((j > 0) + 0)];
  3995.                 if (n == 16 || !VP8GetBit(a, p[0])) {
  3996.                     return n
  3997.                 }
  3998.             }
  3999.             if (n == 16) {
  4000.                 return 16
  4001.             }
  4002.         }
  4003.     }
  4004.     var cC = {
  4005.         i8: Arr(4, uint8_t),
  4006.         i32: uint32_t
  4007.     };
  4008.     var cD = new Array(new Array(0, 0, 0, 0), new Array(1, 0, 0, 0), new Array(0, 1, 0, 0), new Array(1, 1, 0, 0), new Array(0, 0, 1, 0), new Array(1, 0, 1, 0), new Array(0, 1, 1, 0), new Array(1, 1, 1, 0), new Array(0, 0, 0, 1), new Array(1, 0, 0, 1), new Array(0, 1, 0, 1), new Array(1, 1, 0, 1), new Array(0, 0, 1, 1), new Array(1, 0, 1, 1), new Array(0, 1, 1, 1), new Array(1, 1, 1, 1));
  4009.     var cE = 0x08040201;
  4010.  
  4011.     function PACK(X, S) {
  4012.         return ((((X[0] * 0x1000000 + X[1] * 0x10000 + X[2] * 0x100 + X[3] * 0x1) * cE) & 0xff000000) >> (S))
  4013.     }
  4014.     function ParseResiduals(a, b, c) {
  4015.         var d, out_l_nz, first;
  4016.         var e = cB;
  4017.         var q = a.dqm_[a.segment_];
  4018.         var f = a.coeffs_;
  4019.         var g = a.mb_info_[1 - 1];
  4020.         var h = Arr(4, 0),
  4021.             nz_dc = Arr(4, 0);
  4022.         var i = Arr(4, 0),
  4023.             lnz = Arr(4, 0);
  4024.         var j = 0;
  4025.         var k = 0;
  4026.         var x, y, ch;
  4027.         f = memset(0, 384 * sizeof(f));
  4028.         if (!a.is_i4x4_) {
  4029.             var m = Arr(16, 0);
  4030.             var n = b.dc_nz_ + g.dc_nz_;
  4031.             b.dc_nz_ = g.dc_nz_ = (GetCoeffs(c, a.proba_.coeffs_[1], n, q.y2_mat_, 0, m) > 0) + 0;
  4032.             first = 1;
  4033.             e = a.proba_.coeffs_[0];
  4034.             VP8TransformWHT(m, f);
  4035.             f[f.length - 1] = 0
  4036.         } else {
  4037.             first = 0;
  4038.             e = a.proba_.coeffs_[3]
  4039.         }
  4040.         i = ArrCopy(cD[b.nz_ & 0xf]);
  4041.         lnz = ArrCopy(cD[g.nz_ & 0xf]);
  4042.         for (y = 0; y < 4; ++y) {
  4043.             var l = lnz[y];
  4044.             for (x = 0; x < 4; ++x) {
  4045.                 var n = l + i[x];
  4046.                 var o = GetCoeffs(c, e, n, q.y1_mat_, first, f);
  4047.                 i[x] = l = (o > 0) + 0;
  4048.                 nz_dc[x] = ((f[f[f.length - 1] + 0] != 0) + 0);
  4049.                 h[x] = (o > 1) + 0;
  4050.                 f[f.length - 1] += 16
  4051.             }
  4052.             lnz[y] = l;
  4053.             k |= PACK(nz_dc, 24 - y * 4);
  4054.             j |= PACK(h, 24 - y * 4)
  4055.         }
  4056.         d = PACK(i, 24);
  4057.         out_l_nz = PACK(lnz, 24);
  4058.         i = ArrCopy(cD[b.nz_ >> 4]);
  4059.         lnz = ArrCopy(cD[g.nz_ >> 4]);
  4060.         for (ch = 0; ch < 4; ch += 2) {
  4061.             for (y = 0; y < 2; ++y) {
  4062.                 var l = lnz[ch + y];
  4063.                 for (x = 0; x < 2; ++x) {
  4064.                     var n = l + i[ch + x];
  4065.                     var o = GetCoeffs(c, a.proba_.coeffs_[2], n, q.uv_mat_, 0, f);
  4066.                     i[ch + x] = l = (o > 0) + 0;
  4067.                     nz_dc[y * 2 + x] = ((f[f[f.length - 1] + 0] != 0) + 0);
  4068.                     h[y * 2 + x] = (o > 1) + 0;
  4069.                     f[f.length - 1] += 16
  4070.                 }
  4071.                 lnz[ch + y] = l
  4072.             }
  4073.             k |= PACK(nz_dc, 8 - ch * 2);
  4074.             j |= PACK(h, 8 - ch * 2)
  4075.         }
  4076.         d |= PACK(i, 20);
  4077.         out_l_nz |= PACK(lnz, 20);
  4078.         b.nz_ = d;
  4079.         g.nz_ = out_l_nz;
  4080.         a.coeffs_ = f;
  4081.         a.non_zero_ac_ = j + 0;
  4082.         a.non_zero_ = j | k;
  4083.         b.skip_ = (!a.non_zero_) + 0
  4084.     }
  4085.     var cF;
  4086.  
  4087.     function VP8DecodeMB(a, b) {
  4088.         var c = a.br_;
  4089.         var d = a.mb_info_[1 - 1];
  4090.         var e = a.mb_info_[1 + a.mb_x_];
  4091.         if (a.segment_hdr_.update_map_) {
  4092.             a.segment_ = !VP8GetBit(c, a.proba_.segments_[0]) ? 0 + VP8GetBit(c, a.proba_.segments_[1]) : 2 + VP8GetBit(c, a.proba_.segments_[2])
  4093.         }
  4094.         e.skip_ = a.use_skip_proba_ ? VP8GetBit(c, a.skip_p_) : 0;
  4095.         VP8ParseIntraMode(c, a);
  4096.         if (c.eof_) {
  4097.             return 0
  4098.         }
  4099.         if (!e.skip_) {
  4100.             ParseResiduals(a, e, b)
  4101.         } else {
  4102.             d.nz_ = e.nz_ = 0;
  4103.             if (!a.is_i4x4_) {
  4104.                 d.dc_nz_ = e.dc_nz_ = 0
  4105.             }
  4106.             a.non_zero_ = 0;
  4107.             a.non_zero_ac_ = 0
  4108.         }
  4109.         return (!b.eof_)
  4110.     }
  4111.     function VP8InitScanline(a) {
  4112.         var b = a.mb_info_[1 - 1];
  4113.         b.nz_ = 0;
  4114.         b.dc_nz_ = 0;
  4115.         memset_(a.intra_l_, 0, bh, a.intra_l_.length);
  4116.         a.filter_row_ = ((a.filter_type_ > 0) && (a.mb_y_ >= a.tl_mb_y_) && (a.mb_y_ <= a.br_mb_y_)) + 0
  4117.     }
  4118.     var cG;
  4119.  
  4120.     function ParseFrame(a, b) {
  4121.         for (a.mb_y_ = 0; a.mb_y_ < a.br_mb_y_; ++a.mb_y_) {
  4122.             cG = a.parts_[a.mb_y_ & (a.num_parts_ - 1)];
  4123.             VP8InitScanline(a);
  4124.             for (a.mb_x_ = 0; a.mb_x_ < a.mb_w_; a.mb_x_++) {
  4125.                 if (!VP8DecodeMB(a, cG)) {
  4126.                     return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "Premature end-of-file encountered." + a.mb_x_ + ' ' + a.mb_y_)
  4127.                 }
  4128.                 VP8ReconstructBlock(a);
  4129.                 VP8StoreBlock(a)
  4130.             }
  4131.             if (!VP8ProcessRow(a, b)) {
  4132.                 return VP8SetError(a, 'VP8_STATUS_USER_ABORT', "Output aborted.")
  4133.             }
  4134.         }
  4135.         if (a.use_threads_ && !WebPWorkerSync(a.worker_)) {
  4136.             return 0
  4137.         }
  4138.         if (a.layer_data_size_ > 0) {
  4139.             if (!VP8DecodeLayer(a)) {
  4140.                 return 0
  4141.             }
  4142.         }
  4143.         return 1
  4144.     }
  4145.     function VP8Decode(a, b) {
  4146.         var c = 0;
  4147.         if (a == null) {
  4148.             return 0
  4149.         }
  4150.         if (b == null) {
  4151.             return VP8SetError(a, 'VP8_STATUS_INVALID_PARAM', "NULL VP8Io parameter in VP8Decode().")
  4152.         }
  4153.         if (!a.ready_) {
  4154.             if (!VP8GetHeaders(a, b)) {
  4155.                 return 0
  4156.             }
  4157.         }
  4158.         assert(a.ready_);
  4159.         c = (VP8EnterCritical(a, b) == T);
  4160.         if (c) {
  4161.             if (c) c = VP8InitFrame(a, b);
  4162.             if (c) c = ParseFrame(a, b);
  4163.             c &= VP8ExitCritical(a, b)
  4164.         }
  4165.         if (!c) {
  4166.             VP8Clear(a);
  4167.             return 0
  4168.         }
  4169.         a.ready_ = 0;
  4170.         return 1
  4171.     }
  4172.     function VP8Clear(a) {
  4173.         if (a == null) {
  4174.             return
  4175.         }
  4176.         if (a.use_threads_) {
  4177.             WebPWorkerEnd(a.worker_)
  4178.         }
  4179.         if (a.mem_) {
  4180.             a.mem_ = 0
  4181.         }
  4182.         a.mem_ = null;
  4183.         a.mem_size_ = 0;
  4184.         a.ready_ = 0
  4185.     }
  4186.     var cH = 16,
  4187.         YUV_RANGE_MIN = -227,
  4188.         YUV_RANGE_MAX = 256 + 226;
  4189.  
  4190.     function VP8YuvToRgb(y, u, v, a, b) {
  4191.         var c = cJ[v];
  4192.         var d = (cK[v] + VP8kUToG[u]) >> cH;
  4193.         var e = VP8kUToB[u];
  4194.         a[b + 0] = cL[y + c - YUV_RANGE_MIN];
  4195.         a[b + 1] = cL[y + d - YUV_RANGE_MIN];
  4196.         a[b + 2] = cL[y + e - YUV_RANGE_MIN]
  4197.     }
  4198.     function VP8YuvToRgb565(y, u, v, a, b) {
  4199.         var c = cJ[v];
  4200.         var d = (cK[v] + VP8kUToG[u]) >> cH;
  4201.         var e = VP8kUToB[u];
  4202.         a[b + 0] = ((cL[y + c - YUV_RANGE_MIN] & 0xf8) | (cL[y + d - YUV_RANGE_MIN] >> 5));
  4203.         a[b + 1] = (((cL[y + d - YUV_RANGE_MIN] << 3) & 0xe0) | (cL[y + e - YUV_RANGE_MIN] >> 3))
  4204.     }
  4205.     function VP8YuvToArgbKeepA(y, u, v, a, b) {
  4206.         VP8YuvToRgb(y, u, v, a, b + 1)
  4207.     }
  4208.     function VP8YuvToArgb(y, u, v, a, b) {
  4209.         a[b + 0] = 0xff;
  4210.         VP8YuvToArgbKeepA(y, u, v, a, b)
  4211.     }
  4212.     function VP8YuvToRgba4444KeepA(y, u, v, a, b) {
  4213.         var c = cJ[v];
  4214.         var d = (cK[v] + VP8kUToG[u]) >> cH;
  4215.         var e = VP8kUToB[u];
  4216.         a[b + 0] = ((cM[y + c - YUV_RANGE_MIN] << 4) | cM[y + d - YUV_RANGE_MIN]);
  4217.         a[b + 1] = ((a[b + 1] << 44) | (cM[y + e - YUV_RANGE_MIN] << 4))
  4218.     }
  4219.     function VP8YuvToRgba4444(y, u, v, a, b) {
  4220.         a[b + 1] = 0x0f;
  4221.         VP8YuvToRgba4444KeepA(y, u, v, a, b)
  4222.     }
  4223.     function VP8YuvToBgr(y, u, v, a, b) {
  4224.         var c = cJ[v];
  4225.         var d = (cK[v] + VP8kUToG[u]) >> cH;
  4226.         var e = VP8kUToB[u];
  4227.         a[b + 0] = cL[y + e - YUV_RANGE_MIN];
  4228.         a[b + 1] = cL[y + d - YUV_RANGE_MIN];
  4229.         a[b + 2] = cL[y + c - YUV_RANGE_MIN]
  4230.     }
  4231.     function VP8YuvToBgra(y, u, v, a, b) {
  4232.         VP8YuvToBgr(y, u, v, a, b);
  4233.         a[b + 3] = 0xff
  4234.     }
  4235.     function VP8YuvToRgba(y, u, v, a, b) {
  4236.         VP8YuvToRgb(y, u, v, a, b);
  4237.         a[b + 3] = 0xff
  4238.     }
  4239.     var cI = (1 << (cH - 1));
  4240.     var cJ = Arr(256, int16_t),
  4241.         VP8kUToB = Arr(256, int16_t);
  4242.     var cK = Arr(256, int32_t),
  4243.         VP8kUToG = Arr(256, int32_t);
  4244.     var cL = Arr(YUV_RANGE_MAX - YUV_RANGE_MIN, uint8_t);
  4245.     var cM = Arr(YUV_RANGE_MAX - YUV_RANGE_MIN, uint8_t);
  4246.     var cN = 0;
  4247.  
  4248.     function clip(v, a) {
  4249.         return v < 0 ? 0 : v > a ? a : v
  4250.     }
  4251.     function VP8YUVInit(a) {
  4252.         var i;
  4253.         if (cN) {
  4254.             return
  4255.         }
  4256.         for (i = 0; i < 256; ++i) {
  4257.             cJ[i] = (89858 * (i - 128) + cI) >> cH;
  4258.             VP8kUToG[i] = -22014 * (i - 128) + cI;
  4259.             cK[i] = -45773 * (i - 128);
  4260.             VP8kUToB[i] = (113618 * (i - 128) + cI) >> cH
  4261.         }
  4262.         for (i = YUV_RANGE_MIN; i < YUV_RANGE_MAX; ++i) {
  4263.             var k = ((i - 16) * 76283 + cI) >> cH;
  4264.             cL[i - YUV_RANGE_MIN] = clip(k, 255);
  4265.             cM[i - YUV_RANGE_MIN] = clip((k + 8) >> 4, 15)
  4266.         }
  4267.         cN = 1
  4268.     }
  4269.     function LOAD_UV(u, v) {
  4270.         return ((u) | ((v) << 16))
  4271.     }
  4272.     function FUNC_NAME(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s) {
  4273.         var x;
  4274.         var t = (q - 1) >> 1;
  4275.         var u = LOAD_UV(e[f + 0], g[h + 0]);
  4276.         var v = LOAD_UV(i[j + 0], k[l + 0]);
  4277.         if (a) {
  4278.             var w = (3 * u + v + 0x00020002) >> 2;
  4279.             r(a[b + 0], w & 0xff, (w >> 16), m, n)
  4280.         }
  4281.         if (c) {
  4282.             var w = (3 * v + u + 0x00020002) >> 2;
  4283.             r(c[d + 0], w & 0xff, (w >> 16), o, p)
  4284.         }
  4285.         for (x = 1; x <= t; ++x) {
  4286.             var y = LOAD_UV(e[f + x], g[h + x]);
  4287.             var z = LOAD_UV(i[j + x], k[l + x]);
  4288.             var A = u + y + v + z + 0x00080008;
  4289.             var B = (A + 2 * (y + v)) >> 3;
  4290.             var C = (A + 2 * (u + z)) >> 3;
  4291.             if (a) {
  4292.                 var w = (B + u) >> 1;
  4293.                 var D = (C + y) >> 1;
  4294.                 r(a[b + 2 * x - 1], w & 0xff, (w >> 16), m, n + (2 * x - 1) * s);
  4295.                 r(a[b + 2 * x - 0], D & 0xff, (D >> 16), m, n + (2 * x - 0) * s)
  4296.             }
  4297.             if (c) {
  4298.                 var w = (C + v) >> 1;
  4299.                 var D = (B + z) >> 1;
  4300.                 r(c[d + 2 * x - 1], w & 0xff, (w >> 16), o, p + (2 * x - 1) * s);
  4301.                 r(c[d + 2 * x + 0], D & 0xff, (D >> 16), o, p + (2 * x + 0) * s)
  4302.             }
  4303.             u = y;
  4304.             v = z
  4305.         }
  4306.         if (!(q & 1)) {
  4307.             if (a) {
  4308.                 var w = (3 * u + v + 0x00020002) >> 2;
  4309.                 r(a[b + q - 1], w & 0xff, (w >> 16), m, n + (q - 1) * s)
  4310.             }
  4311.             if (c) {
  4312.                 var w = (3 * v + u + 0x00020002) >> 2;
  4313.                 r(c[d + q - 1], w & 0xff, (w >> 16), o, p + (q - 1) * s)
  4314.             }
  4315.         }
  4316.     }
  4317.     function UpsampleRgbLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4318.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgb, 3)
  4319.     }
  4320.     function UpsampleBgrLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4321.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToBgr, 3)
  4322.     }
  4323.     function UpsampleRgbaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4324.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgba, 4)
  4325.     }
  4326.     function UpsampleBgraLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4327.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToBgra, 4)
  4328.     }
  4329.     function UpsampleArgbLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4330.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToArgb, 4)
  4331.     }
  4332.     function UpsampleRgba4444LinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4333.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgba4444, 2)
  4334.     }
  4335.     function UpsampleRgb565LinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4336.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgb565, 2)
  4337.     }
  4338.     function UpsampleRgbKeepAlphaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4339.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgb, 4)
  4340.     }
  4341.     function UpsampleBgrKeepAlphaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4342.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToBgr, 4)
  4343.     }
  4344.     function UpsampleArgbKeepAlphaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4345.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToArgbKeepA, 4)
  4346.     }
  4347.     function UpsampleRgba4444KeepAlphaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l) {
  4348.         FUNC_NAME(A, a, B, b, C, c, D, d, E, e, F, f, G, g, H, h, l, VP8YuvToRgba4444KeepA, 2)
  4349.     }
  4350.     var cO = new Array(MODE_LAST);
  4351.     var cP = new Array(MODE_LAST);
  4352.  
  4353.     function InitUpsamplers(a) {
  4354.         cO[O] = UpsampleRgbLinePair;
  4355.         cO[MODE_RGBA] = UpsampleRgbaLinePair;
  4356.         cO[MODE_BGR] = UpsampleBgrLinePair;
  4357.         cO[MODE_BGRA] = UpsampleBgraLinePair;
  4358.         cO[MODE_ARGB] = UpsampleArgbLinePair;
  4359.         cO[MODE_RGBA_4444] = UpsampleRgba4444LinePair;
  4360.         cO[MODE_RGB_565] = UpsampleRgb565LinePair;
  4361.         cP[O] = UpsampleRgbLinePair;
  4362.         cP[MODE_RGBA] = UpsampleRgbKeepAlphaLinePair;
  4363.         cP[MODE_BGR] = UpsampleBgrLinePair;
  4364.         cP[MODE_BGRA] = UpsampleBgrKeepAlphaLinePair;
  4365.         cP[MODE_ARGB] = UpsampleArgbKeepAlphaLinePair;
  4366.         cP[MODE_RGBA_4444] = UpsampleRgba4444KeepAlphaLinePair;
  4367.         cP[MODE_RGB_565] = UpsampleRgb565LinePair
  4368.     }
  4369.     function FUNC_NAME_SAMPLE(a, b, c, d, u, e, v, f, g, h, j, k, l, m, n) {
  4370.         var i;
  4371.         for (i = 0; i < l - 1; i += 2) {
  4372.             m(a[b + 0], u[e + 0], v[f + 0], g, h);
  4373.             m(a[b + 1], u[e + 0], v[f + 0], g, h + n);
  4374.             m(c[d + 0], u[e + 0], v[f + 0], j, k);
  4375.             m(c[d + 1], u[e + 0], v[f + 0], j, k + n);
  4376.             b += 2;
  4377.             d += 2;
  4378.             e++;
  4379.             f++;
  4380.             h += 2 * n;
  4381.             k += 2 * n
  4382.         }
  4383.         if (i == l - 1) {
  4384.             m(a[b + 0], u[e + 0], v[f + 0], g, h);
  4385.             m(c[d + 0], u[e + 0], v[f + 0], j, k)
  4386.         }
  4387.     }
  4388.     function SampleRgbLinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4389.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToRgb, 3)
  4390.     }
  4391.     function SampleBgrLinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4392.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToBgr, 3)
  4393.     }
  4394.     function SampleRgbaLinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4395.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToRgba, 4)
  4396.     }
  4397.     function SampleBgraLinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4398.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToBgra, 4)
  4399.     }
  4400.     function SampleArgbLinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4401.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToArgb, 4)
  4402.     }
  4403.     function SampleRgba4444LinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4404.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToRgba4444, 2)
  4405.     }
  4406.     function SampleRgb565LinePair(A, a, B, b, C, c, D, d, E, e, F, f, l) {
  4407.         FUNC_NAME_SAMPLE(A, a, B, b, C, c, D, d, E, e, F, f, l, VP8YuvToRgb565, 2)
  4408.     }
  4409.     var cQ = new Array(SampleRgbLinePair, SampleRgbaLinePair, SampleBgrLinePair, SampleBgraLinePair, SampleArgbLinePair, SampleRgba4444LinePair, SampleRgb565LinePair);
  4410.  
  4411.     function FUNC_NAME_YUV444(y, a, u, b, v, c, d, e, f, g, h) {
  4412.         var i;
  4413.         for (i = 0; i < f; ++i) g(y[a + i], u[b + i], v[c + i], d[e + i * h], 0)
  4414.     }
  4415.     function Yuv444ToRgb(A, a, B, b, C, c, D, d, l) {
  4416.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToRgb, 3)
  4417.     }
  4418.     function Yuv444ToBgr(A, a, B, b, C, c, D, d, l) {
  4419.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToBgr, 3)
  4420.     }
  4421.     function Yuv444ToRgba(A, a, B, b, C, c, D, d, l) {
  4422.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToRgba, 4)
  4423.     }
  4424.     function Yuv444ToBgra(A, a, B, b, C, c, D, d, l) {
  4425.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToBgra, 4)
  4426.     }
  4427.     function Yuv444ToArgb(A, a, B, b, C, c, D, d, l) {
  4428.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToArgb, 4)
  4429.     }
  4430.     function Yuv444ToRgba4444(A, a, B, b, C, c, D, d, l) {
  4431.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToRgba4444, 2)
  4432.     }
  4433.     function Yuv444ToRgb565(A, a, B, b, C, c, D, d, l) {
  4434.         FUNC_NAME_YUV444(A, a, B, b, C, c, D, d, l, VP8YuvToRgb565, 2)
  4435.     }
  4436.     var cR = new Array(Yuv444ToRgb, Yuv444ToRgba, Yuv444ToBgr, Yuv444ToBgra, Yuv444ToArgb, Yuv444ToRgba4444, Yuv444ToRgb565);
  4437.  
  4438.     function EmitYUV(a, p) {
  4439.         var b = p.output;
  4440.         var c = b.u.YUVA;
  4441.         var d = c.y;
  4442.         var e = c.y_off + a.mb_y * c.y_stride;
  4443.         var f = c.u;
  4444.         var g = c.u_off + (a.mb_y >> 1) * c.u_stride;
  4445.         var h = c.v;
  4446.         var i = c.v_off + (a.mb_y >> 1) * c.v_stride;
  4447.         var k = a.mb_w;
  4448.         var l = a.mb_h;
  4449.         var m = parseInt((k + 1) / 2);
  4450.         var j;
  4451.         for (j = 0; j < l; ++j) {
  4452.             memcpy(d, e + j * c.y_stride, a.y, a.y_off + j * a.y_stride, k)
  4453.         }
  4454.         for (j = 0; j < (l + 1) / 2; ++j) {
  4455.             memcpy(f, g + j * c.u_stride, a.u, a.u_off + j * a.uv_stride, m);
  4456.             memcpy(h, i + j * c.v_stride, a.v, a.v_off + j * a.uv_stride, m)
  4457.         }
  4458.         return a.mb_h
  4459.     }
  4460.     function EmitSampledRGB(a, p) {
  4461.         var b = p.output;
  4462.         var c = b.u.RGBA;
  4463.         var d = c.rgba;
  4464.         var e = c.rgba_off + a.mb_y * c.stride;
  4465.         var f = a.y;
  4466.         var g = a.y_off;
  4467.         var h = a.u;
  4468.         var i = a.u_off;
  4469.         var k = a.v;
  4470.         var l = a.v_off;
  4471.         var m = cQ[b.colorspace];
  4472.         var n = a.mb_w;
  4473.         var o = a.mb_h - 1;
  4474.         var j;
  4475.         for (j = 0; j < o; j += 2) {
  4476.             m(f, g, f, g + a.y_stride, h, i, k, l, d, e, d, e + c.stride, n);
  4477.             g += 2 * a.y_stride;
  4478.             i += a.uv_stride;
  4479.             l += a.uv_stride;
  4480.             e += 2 * c.stride
  4481.         }
  4482.         if (j == o) {
  4483.             m(f, g, f, g, h, i, k, l, d, e, d, e, n)
  4484.         }
  4485.         return a.mb_h
  4486.     }
  4487.     function EmitFancyRGB(a, p) {
  4488.         var b = a.mb_h;
  4489.         var c = p.output.u.RGBA;
  4490.         var d = c.rgba;
  4491.         var e = c.rgba_off + a.mb_y * c.stride;
  4492.         var f = a.a ? cP[p.output.colorspace] : cO[p.output.colorspace];
  4493.         var g = a.y;
  4494.         var h = a.y_off;
  4495.         var i = a.u;
  4496.         var j = a.u_off;
  4497.         var k = a.v;
  4498.         var l = a.v_off;
  4499.         var m = p.tmp_u;
  4500.         var n = p.tmp_u_off;
  4501.         var o = p.tmp_v;
  4502.         var q = p.tmp_v_off;
  4503.         var y = a.mb_y;
  4504.         var r = a.mb_y + a.mb_h;
  4505.         var s = a.mb_w;
  4506.         var t = parseInt((s + 1) / 2);
  4507.         if (y == 0) {
  4508.             f(null, null, g, h, i, j, k, l, i, j, k, l, null, null, d, e, s)
  4509.         } else {
  4510.             f(p.tmp_y, p.tmp_y_off, g, h, m, n, o, q, i, j, k, l, d, e - c.stride, d, e, s);
  4511.             b++
  4512.         }
  4513.         for (; y + 2 < r; y += 2) {
  4514.             m = i;
  4515.             n = j;
  4516.             o = k;
  4517.             q = l;
  4518.             j += a.uv_stride;
  4519.             l += a.uv_stride;
  4520.             e += 2 * c.stride;
  4521.             h += 2 * a.y_stride;
  4522.             f(g, h - a.y_stride, g, h, m, n, o, q, i, j, k, l, d, e - c.stride, d, e, s)
  4523.         }
  4524.         h += a.y_stride;
  4525.         if (a.crop_top + r < a.crop_bottom) {
  4526.             memcpy(p.tmp_y, p.tmp_y_off, g, h, s * sizeof(p.tmp_y));
  4527.             memcpy(p.tmp_u, p.tmp_u_off, i, j, t * sizeof(p.tmp_u));
  4528.             memcpy(p.tmp_v, p.tmp_v_off, k, l, t * sizeof(p.tmp_v));
  4529.             b--
  4530.         } else {
  4531.             if (!(r & 1)) {
  4532.                 f(g, h, null, null, i, j, k, l, i, j, k, l, d, e + c.stride, null, null, s)
  4533.             }
  4534.         }
  4535.         return b
  4536.     }
  4537.     function EmitAlphaYUV(a, p) {
  4538.         var b = a.mb_w;
  4539.         var c = a.mb_h;
  4540.         var j;
  4541.         var d = p.output.u.YUVA;
  4542.         var e = d.a;
  4543.         var f = d.a_off + a.mb_y * d.a_stride;
  4544.         var g = a.a;
  4545.         var h = a.a_off;
  4546.         if (g != null) {
  4547.             for (j = 0; j < c; ++j) {
  4548.                 memcpy(e, f, g, h, b * sizeof(e));
  4549.                 h += a.width;
  4550.                 f += d.a_stride
  4551.             }
  4552.         }
  4553.         return 0
  4554.     }
  4555.     function EmitAlphaRGB(a, p) {
  4556.         var b = p.output.colorspace;
  4557.         var c = b == MODE_ARGB ? 0 : (b == MODE_RGBA_4444 ? 1 : 3);
  4558.         var d = b == MODE_RGBA_4444 ? 2 : 4;
  4559.         var e = a.mb_w;
  4560.         var f = a.mb_h;
  4561.         var i, j;
  4562.         var g = p.output.u.RGBA;
  4563.         var h = g.rgba;
  4564.         var k = g.rgba_off + a.mb_y * g.stride;
  4565.         var l = a.a;
  4566.         var m = a.a_off;
  4567.         if (l != null) {
  4568.             for (j = 0; j < f; ++j) {
  4569.                 for (i = 0; i < e; ++i) {
  4570.                     h[k + d * i + c] = l[m + i]
  4571.                 }
  4572.                 m += a.width;
  4573.                 k += g.stride
  4574.             }
  4575.         }
  4576.         return 0
  4577.     }
  4578.     var cS = 30;
  4579.  
  4580.     function MULT(x, y) {
  4581.         return (((x) * (y) + (1 << (cS - 1))) >> cS)
  4582.     }
  4583.     function InitRescaler(a, b, c, d, e, f, g, h, i, j, k, l, m, n) {
  4584.         a.x_expand = (b < f) + 0;
  4585.         a.src_width = b;
  4586.         a.src_height = c;
  4587.         a.dst_width = f;
  4588.         a.dst_height = g;
  4589.         a.dst = d;
  4590.         a.dst_off = e;
  4591.         a.dst_stride = h;
  4592.         a.x_add = a.x_expand ? (j - 1) : i - j;
  4593.         a.x_sub = a.x_expand ? (i - 1) : j;
  4594.         a.y_accum = k;
  4595.         a.y_add = k;
  4596.         a.y_sub = l;
  4597.         a.fx_scale = parseInt((1 << cS) / j);
  4598.         a.fy_scale = parseInt((1 << cS) / l);
  4599.         a.fxy_scale = a.x_expand ? parseInt(int64BitLeft(g, cS)) / (j * c) : parseInt(int64BitLeft(g, cS)) / (i * c);
  4600.         a.irow = m;
  4601.         a.irow_off = 0 * 4;
  4602.         a.frow = m;
  4603.         a.frow_off = n + f * 4
  4604.     }
  4605.     function ImportRow(a, b, c) {
  4606.         var d = 0;
  4607.         var e = int;
  4608.         var f = 0;
  4609.         if (!c.x_expand) {
  4610.             var g = 0;
  4611.             for (e = 0; e < c.dst_width; ++e) {
  4612.                 f += c.x_add;
  4613.                 for (; f > 0; f -= c.x_sub) {
  4614.                     g += a[b + (d++)]
  4615.                 } {
  4616.                     var h = a[b + (d++)];
  4617.                     var i = h * (-f);
  4618.                     write32BitIn4Bytes(c.frow, c.frow_off + e * 4, ((g + h) * c.x_sub - i));
  4619.                     g = MULT(i, c.fx_scale)
  4620.                 }
  4621.             }
  4622.         } else {
  4623.             var j = a[b + 0],
  4624.                 right = a[b + 0];
  4625.             for (e = 0; e < c.dst_width; ++e) {
  4626.                 if (f < 0) {
  4627.                     j = right;
  4628.                     right = a[b + (++d)];
  4629.                     f += c.x_add
  4630.                 }
  4631.                 write32BitIn4Bytes(c.frow, c.frow_off + e * 4, (right * c.x_add + (j - right) * f));
  4632.                 f -= c.x_sub
  4633.             }
  4634.         }
  4635.         for (e = 0; e < c.dst_width; ++e) {
  4636.             write32BitIn4Bytes(c.irow, c.irow_off + e * 4, (write4BytesIn32Bit(c.frow, c.frow_off + e * 4) + write4BytesIn32Bit(c.irow, c.irow_off + e * 4)))
  4637.         }
  4638.     }
  4639.     function ExportRow(a) {
  4640.         var b = int;
  4641.         var c = a.fy_scale * (-a.y_accum);
  4642.         assert(a.y_accum <= 0);
  4643.         for (b = 0; b < a.dst_width; ++b) {
  4644.             var d = MULT(write4BytesIn32Bit(a.frow, a.frow_off + b * 4), c);
  4645.             var v = MULT(write4BytesIn32Bit(a.irow, a.irow_off + b * 4) - d, a.fxy_scale);
  4646.             a.dst[a.dst_off + b] = (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255;
  4647.             write32BitIn4Bytes(a.irow, a.irow_off + b * 4, d)
  4648.         }
  4649.         a.y_accum += a.y_add;
  4650.         a.dst_off += a.dst_stride
  4651.     }
  4652.     function Rescale(a, b, c, d, e) {
  4653.         var f = 0;
  4654.         while (d-- > 0) {
  4655.             ImportRow(a, e);
  4656.             b += c;
  4657.             e.y_accum -= e.y_sub;
  4658.             while (e.y_accum <= 0) {
  4659.                 ExportRow(e);
  4660.                 f++
  4661.             }
  4662.         }
  4663.         return f
  4664.     }
  4665.     function EmitRescaledYUV(a, p) {
  4666.         var b = a.mb_h;
  4667.         var c = (b + 1) >> 1;
  4668.         var d = Rescale(a.y, a.y_off, a.y_stride, b, p.scaler_y);
  4669.         Rescale(a.u, a.u_off, a.uv_stride, c, p.scaler_u);
  4670.         Rescale(a.v, a.v_off, a.uv_stride, c, p.scaler_v);
  4671.         return d
  4672.     }
  4673.     function EmitRescaledAlphaYUV(a, p) {
  4674.         if (a.a != null) {
  4675.             Rescale(a.a, a.a_off, a.width, a.mb_h, p.scaler_a)
  4676.         }
  4677.         return 0
  4678.     }
  4679.     function IsAlphaMode(a) {
  4680.         return (a == MODE_RGBA || a == MODE_BGRA || a == MODE_ARGB || a == MODE_RGBA_4444 || a == MODE_YUVA)
  4681.     }
  4682.     function InitYUVRescaler(a, p) {
  4683.         var b = IsAlphaMode(p.output.colorspace);
  4684.         var c = p.output.u.YUVA;
  4685.         var d = a.scaled_width;
  4686.         var e = a.scaled_height;
  4687.         var f = (d + 1) >> 1;
  4688.         var g = (e + 1) >> 1;
  4689.         var h = (a.mb_w + 1) >> 1;
  4690.         var i = (a.mb_h + 1) >> 1;
  4691.         var j = 2 * d;
  4692.         var k = 2 * f;
  4693.         var l = size_t;
  4694.         var m = int32_t;
  4695.         var n = 0;
  4696.         l = j + 2 * k;
  4697.         if (b) {
  4698.             l += j
  4699.         }
  4700.         p.memory = malloc(l * sizeof(m) * 4, 0);
  4701.         if (p.memory == null) {
  4702.             return 0
  4703.         }
  4704.         m = p.memory;
  4705.         n = 0;
  4706.         InitRescaler(p.scaler_y, a.mb_w, a.mb_h, c.y, c.y_off, d, e, c.y_stride, a.mb_w, d, a.mb_h, e, m, n);
  4707.         InitRescaler(p.scaler_u, h, i, c.u, c.u_off, f, g, c.u_stride, h, f, i, g, m, n + j);
  4708.         InitRescaler(p.scaler_v, h, i, c.v, c.v_off, f, g, c.v_stride, h, f, i, g, m, n + j + k);
  4709.         p.emit = EmitRescaledYUV;
  4710.         if (b) {
  4711.             InitRescaler(p.scaler_a, a.mb_w, a.mb_h, c.a, c.a_off, d, e, c.a_stride, a.mb_w, d, a.mb_h, e, m, n + j + 2 * k);
  4712.             p.emit_alpha = EmitRescaledAlphaYUV
  4713.         }
  4714.         return 1
  4715.     }
  4716.     function Import(a, b, c, d, e) {
  4717.         var f = 0;
  4718.         while (f < d && e.y_accum > 0) {
  4719.             ImportRow(a, b, e);
  4720.             b += c;
  4721.             ++f;
  4722.             e.y_accum -= e.y_sub
  4723.         }
  4724.         return f
  4725.     }
  4726.     function ExportRGB(p, a) {
  4727.         var b = cR[p.output.colorspace];
  4728.         var c = p.output.u.RGBA;
  4729.         var d = c.rgba;
  4730.         var e = c.rgba_off + (p.last_y + a) * c.stride;
  4731.         var f = 0;
  4732.         while (p.scaler_y.y_accum <= 0 && p.scaler_u.y_accum <= 0) {
  4733.             assert(p.last_y + a + f < p.output.height);
  4734.             assert(p.scaler_u.y_accum == p.scaler_v.y_accum);
  4735.             ExportRow(p.scaler_y);
  4736.             ExportRow(p.scaler_u);
  4737.             ExportRow(p.scaler_v);
  4738.             b(p.scaler_y.dst, p.scaler_y.dst_off, p.scaler_u.dst, p.scaler_u.dst_off, p.scaler_v.dst, p.scaler_v.dst_off, d, e, p.scaler_y.dst_width);
  4739.             e += c.stride;
  4740.             f++
  4741.         }
  4742.         return f
  4743.     }
  4744.     function EmitRescaledRGB(a, p) {
  4745.         var b = a.mb_h;
  4746.         var c = (b + 1) >> 1;
  4747.         var j = 0,
  4748.             uv_j = 0;
  4749.         var d = 0;
  4750.         while (j < b) {
  4751.             var e = Import(a.y, a.y_off + j * a.y_stride, a.y_stride, b - j, p.scaler_y);
  4752.             var f = Import(a.u, a.u_off + uv_j * a.uv_stride, a.uv_stride, c - uv_j, p.scaler_u);
  4753.             var g = Import(a.v, a.v_off + uv_j * a.uv_stride, a.uv_stride, c - uv_j, p.scaler_v);
  4754.             assert(f == g);
  4755.             j += e;
  4756.             uv_j += f;
  4757.             d += ExportRGB(p, d)
  4758.         }
  4759.         return d
  4760.     }
  4761.     function ExportAlpha(p, a) {
  4762.         var b = p.output.u.RGBA;
  4763.         var c = b.rgba;
  4764.         var d = b.rgba_off + (p.last_y + a) * b.stride;
  4765.         var e = 0;
  4766.         while (p.scaler_a.y_accum <= 0) {
  4767.             var i;
  4768.             assert(p.last_y + a + e < p.output.height);
  4769.             ExportRow(p.scaler_a);
  4770.             for (i = 0; i < p.scaler_a.dst_width; ++i) {
  4771.                 c[d + 4 * i + 3] = p.scaler_a.dst[p.scaler_a.dst_off + i]
  4772.             }
  4773.             d += b.stride;
  4774.             e++
  4775.         }
  4776.         return e
  4777.     }
  4778.     function EmitRescaledAlphaRGB(a, p) {
  4779.         if (a.a != null) {
  4780.             var j = 0,
  4781.                 pos = 0;
  4782.             while (j < a.mb_h) {
  4783.                 j += Import(a.a, a.a_off + j * a.width, a.width, a.mb_h - j, p.scaler_a);
  4784.                 pos += ExportAlpha(p, pos)
  4785.             }
  4786.         }
  4787.         return 0
  4788.     }
  4789.     function InitRGBRescaler(a, p) {
  4790.         var b = IsAlphaMode(p.output.colorspace);
  4791.         var c = a.scaled_width;
  4792.         var d = a.scaled_height;
  4793.         var e = (a.mb_w + 1) >> 1;
  4794.         var f = (a.mb_h + 1) >> 1;
  4795.         var g = 2 * c;
  4796.         var h = int32_t;
  4797.         var i = 0;
  4798.         var j = uint8_t;
  4799.         var k = 0;
  4800.         var l = size_t,
  4801.             tmp_size2 = size_t;
  4802.         l = 3 * g;
  4803.         tmp_size2 = 3 * c;
  4804.         if (b) {
  4805.             l += g;
  4806.             tmp_size2 += c
  4807.         }
  4808.         p.memory = malloc(l * sizeof(h) * 4 + tmp_size2 * sizeof(j) * 1, 0);
  4809.         p.memory_off = 0;
  4810.         if (p.memory == null) {
  4811.             slert('memory error');
  4812.             return 0
  4813.         }
  4814.         h = p.memory;
  4815.         i = p.memory_off;
  4816.         j = h;
  4817.         k = i + l * 1;
  4818.         InitRescaler(p.scaler_y, a.mb_w, a.mb_h, j, k + 0 * c * 1, c, d, 0, a.mb_w, c, a.mb_h, d, h, i + 0 * g * 4);
  4819.         InitRescaler(p.scaler_u, e, f, j, k + 1 * c * 1, c, d, 0, a.mb_w, 2 * c, a.mb_h, 2 * d, h, i + 1 * g * 4);
  4820.         InitRescaler(p.scaler_v, e, f, j, k + 2 * c * 1, c, d, 0, a.mb_w, 2 * c, a.mb_h, 2 * d, h, i + 2 * g * 4);
  4821.         p.emit = EmitRescaledRGB;
  4822.         if (b) {
  4823.             InitRescaler(p.scaler_a, a.mb_w, a.mb_h, j, k + 3 * c * 1, c, d, 0, a.mb_w, c, a.mb_h, d, h, i + 3 * g * 4);
  4824.             p.emit_alpha = EmitRescaledAlphaRGB
  4825.         }
  4826.         return 1
  4827.     }
  4828.     function InitFromOptions(a, b) {
  4829.         var W = b.width;
  4830.         var H = b.height;
  4831.         var x = 0,
  4832.             y = 0,
  4833.             w = W,
  4834.             h = H;
  4835.         b.use_cropping = (a != null) && (a.use_cropping > 0);
  4836.         if (b.use_cropping) {
  4837.             w = a.crop_width;
  4838.             h = a.crop_height;
  4839.             x = a.crop_left & ~1;
  4840.             y = a.crop_top & ~1;
  4841.             if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) {
  4842.                 return 0
  4843.             }
  4844.         }
  4845.         b.crop_left = x;
  4846.         b.crop_top = y;
  4847.         b.crop_right = x + w;
  4848.         b.crop_bottom = y + h;
  4849.         b.mb_w = w;
  4850.         b.mb_h = h;
  4851.         b.use_scaling = ((a != null) && (a.use_scaling > 0)) + 0;
  4852.         if (b.use_scaling) {
  4853.             if (a.scaled_width <= 0 || a.scaled_height <= 0) {
  4854.                 return 0
  4855.             }
  4856.             b.scaled_width = a.scaled_width;
  4857.             b.scaled_height = a.scaled_height
  4858.         }
  4859.         b.bypass_filtering = a && a.bypass_filtering;
  4860.         b.fancy_upsampling = ((a == null) || (!a.no_fancy_upsampling)) + 0;
  4861.         if (b.use_scaling) {
  4862.             b.bypass_filtering = (b.scaled_width < parseInt(W * 3 / 4)) + 0 && (b.scaled_height < parseInt(H * 3 / 4)) + 0;
  4863.             b.fancy_upsampling = 0
  4864.         }
  4865.         return 1
  4866.     }
  4867.     function CustomSetup(a) {
  4868.         var p = a.opaque;
  4869.         var b = (p.output.colorspace < MODE_YUV);
  4870.         p.memory = null;
  4871.         p.emit = null;
  4872.         p.emit_alpha = null;
  4873.         if (!InitFromOptions(p.options_, a)) {
  4874.             return 0
  4875.         }
  4876.         if (a.use_scaling) {
  4877.             var c = b ? InitRGBRescaler(a, p) : InitYUVRescaler(a, p);
  4878.             if (!c) {
  4879.                 alert('memory error #1');
  4880.                 return 0
  4881.             }
  4882.         } else {
  4883.             if (b) {
  4884.                 p.emit = EmitSampledRGB;
  4885.                 if (a.fancy_upsampling) {
  4886.                     var d = (a.mb_w + 1) >> 1;
  4887.                     p.memory = malloc(a.mb_w + 2 * d, 205);
  4888.                     if (p.memory == null) {
  4889.                         alert('memory error #2');
  4890.                         return 0
  4891.                     }
  4892.                     p.tmp_y = p.memory;
  4893.                     p.tmp_y_off = 0;
  4894.                     p.tmp_u = p.tmp_y;
  4895.                     p.tmp_u_off = p.tmp_y_off + a.mb_w;
  4896.                     p.tmp_v = p.tmp_u;
  4897.                     p.tmp_v_off = p.tmp_u_off + d;
  4898.                     p.emit = EmitFancyRGB;
  4899.                     InitUpsamplers()
  4900.                 }
  4901.             } else {
  4902.                 p.emit = EmitYUV
  4903.             }
  4904.             if (IsAlphaMode(p.output.colorspace)) {
  4905.                 p.emit_alpha = b ? EmitAlphaRGB : EmitAlphaYUV
  4906.             }
  4907.         }
  4908.         if (b) {
  4909.             VP8YUVInit()
  4910.         }
  4911.         return 1
  4912.     }
  4913.     function CustomPut(a) {
  4914.         var p = a.opaque;
  4915.         var b = a.mb_w;
  4916.         var c = a.mb_h;
  4917.         var d;
  4918.         assert(!(a.mb_y & 1));
  4919.         if (b <= 0 || c <= 0) {
  4920.             return 0
  4921.         }
  4922.         d = p.emit(a, p);
  4923.         p.last_y += d;
  4924.         if (p.emit_alpha) {
  4925.             p.emit_alpha(a, p)
  4926.         }
  4927.         return 1
  4928.     }
  4929.     function CustomTeardown(a) {
  4930.         var p = a.opaque;
  4931.         p.memory = '';
  4932.         p.memory = null
  4933.     }
  4934.     function WebPInitCustomIo(b, c) {
  4935.         c.put = function (a) {
  4936.             return CustomPut(a)
  4937.         };
  4938.         c.setup = function (a) {
  4939.             return CustomSetup(a)
  4940.         };
  4941.         c.teardown = function (a) {
  4942.             return CustomTeardown(a)
  4943.         };
  4944.         c.opaque = b
  4945.     }
  4946.     var co = 12;
  4947.     var cT = 10;
  4948.     var cU = 4096;
  4949.     var cV = 4096;
  4950.     var cW = 0,
  4951.         STATE_PARTS0 = 1,
  4952.         STATE_DATA = 2,
  4953.         STATE_DONE = 3,
  4954.         STATE_ERROR = 4;
  4955.     var cX = 0,
  4956.         MEM_MODE_APPEND = 1,
  4957.         MEM_MODE_MAP = 2;
  4958.     var cY = {
  4959.         mode_: 'MemBufferMode',
  4960.         start_: uint32_t,
  4961.         end_: uint32_t,
  4962.         buf_size_: size_t,
  4963.         buf_: uint8_t,
  4964.         buf_off: 0,
  4965.         part0_size_: size_t,
  4966.         part0_buf_: uint8_t,
  4967.         part0_buf_off: 0
  4968.     };
  4969.     var cZ = {
  4970.         state_: "DecState",
  4971.         params_: newObjectIt(ba),
  4972.         dec_: newObjectIt(bz),
  4973.         io_: newObjectIt(Y),
  4974.         mem_: newObjectIt(cY),
  4975.         output_: newObjectIt(R)
  4976.     };
  4977.     var da = {
  4978.         left_: newObjectIt(bw),
  4979.         info_: newObjectIt(bw),
  4980.         intra_t_: Arr(4, uint8_t),
  4981.         intra_l_: Arr(4, uint8_t),
  4982.         br_: newObjectIt(bb),
  4983.         token_br_: newObjectIt(bb)
  4984.     };
  4985.  
  4986.     function MemDataSize(a) {
  4987.         return (a.end_ - a.start_)
  4988.     }
  4989.     function AppendToMemBuffer(a, b, c) {
  4990.         var d = a.mem_;
  4991.         var e = a.dec_;
  4992.         var f = e.num_parts_ - 1;
  4993.         assert(d.mode_ == MEM_MODE_APPEND);
  4994.         if (d.end_ + c > d.buf_size_) {
  4995.             var p;
  4996.             var g = null;
  4997.             var h = 0;
  4998.             var i = parseInt((MemDataSize(d) + c + cU - 1) / cU);
  4999.             var j = i * cU;
  5000.             var k = d.buf_;
  5001.             var l = d.buf_off + d.start_;
  5002.             var g = malloc(j - 1, 205);
  5003.             var h = 0;
  5004.             if (!g) return 0;
  5005.             memcpy(g, h, k, l, MemDataSize(d));
  5006.             for (p = 0; p <= f; ++p) {
  5007.                 if (e.parts_[p].buf_off != null) {
  5008.                     e.parts_[p].buf_ = g;
  5009.                     e.parts_[p].buf_off = h + ((e.parts_[p].buf_off) - l);
  5010.                     e.parts_[p].buf_end_ = h + ((e.parts_[p].buf_end_) - l)
  5011.                 }
  5012.             }
  5013.             d.buf_ = '';
  5014.             d.buf_ = g;
  5015.             d.buf_off = h;
  5016.             d.buf_size_ = j;
  5017.             d.end_ = MemDataSize(d);
  5018.             d.start_ = 0
  5019.         }
  5020.         memcpy(d.buf_, d.buf_off + d.end_, b, 0, c);
  5021.         d.end_ += c;
  5022.         assert(d.end_ <= d.buf_size_);
  5023.         if (f >= 0) {
  5024.             e.parts_[f].buf_end_ = d.buf_off + d.end_
  5025.         }
  5026.         a.io_.data = d.buf_;
  5027.         a.io_.data_off = d.buf_off;
  5028.         a.io_.data_size = MemDataSize(d);
  5029.         return 1
  5030.     }
  5031.     function RemapMemBuffer(a, b, c, d) {
  5032.         var p;
  5033.         var e = a.mem_;
  5034.         var f = a.dec_;
  5035.         var g = f.num_parts_ - 1;
  5036.         var h = e.buf_;
  5037.         var i = e.buf_off;
  5038.         assert(e.mode_ == MEM_MODE_MAP);
  5039.         if (d < e.buf_size_) {
  5040.             alert('we cannot remap to a shorter buffer!');
  5041.             return 0
  5042.         }
  5043.         for (p = 0; p <= g; ++p) {
  5044.             if (f.parts_[p].buf_off != null) {
  5045.                 f.parts_[p].buf_ = b;
  5046.                 f.parts_[p].buf_off = c + ((f.parts_[p].buf_off) - i);
  5047.                 f.parts_[p].buf_end_ = c + ((f.parts_[p].buf_end_) - i)
  5048.             }
  5049.         }
  5050.         if (g >= 0) {
  5051.             f.parts_[g].buf_end_ = c + d
  5052.         }
  5053.         if (f.br_.buf_) {
  5054.             f.br_.buf_ = b;
  5055.             f.br_.buf_off = c + ((f.br_.buf_off) - i);
  5056.             f.br_.buf_end_ = c + ((f.br_.buf_end_) - i)
  5057.         }
  5058.         e.buf_ = b;
  5059.         e.buf_off = c;
  5060.         e.end_ = e.buf_size_ = d;
  5061.         a.io_.data = b;
  5062.         a.io_.data_off = c;
  5063.         a.io_.data_size = d;
  5064.         return 1
  5065.     }
  5066.     function InitMemBuffer(a) {
  5067.         a.mode_ = cX;
  5068.         a.buf_ = 0;
  5069.         a.buf_size_ = 0;
  5070.         a.part0_buf_ = 0;
  5071.         a.part0_size_ = 0
  5072.     }
  5073.     function ClearMemBuffer(a) {
  5074.         assert(a);
  5075.         if (a.mode_ == MEM_MODE_APPEND) {
  5076.             a.buf_ = '';
  5077.             a.buf_off = 0;
  5078.             a.part0_buf_ = '';
  5079.             a.part0_buf_off = ''
  5080.         }
  5081.     }
  5082.     function CheckMemBufferMode(a, b) {
  5083.         if (a.mode_ == cX) {
  5084.             a.mode_ = b
  5085.         } else if (a.mode_ != b) {
  5086.             alert('we mixed the modes => error');
  5087.             return 0
  5088.         }
  5089.         assert(a.mode_ == b);
  5090.         return 1
  5091.     }
  5092.     function SaveContext(a, b, c) {
  5093.         var d = a.br_;
  5094.         var e = a.mb_info_[1 - 1];
  5095.         var f = a.mb_info_[1 + a.mb_x_];
  5096.         c.left_ = newObjectIt(e);
  5097.         c.info_ = newObjectIt(f);
  5098.         c.br_ = newObjectIt(d);
  5099.         c.token_br_ = newObjectIt(b);
  5100.         memcpy(c.intra_t_, 0, a.intra_t_, +4 * a.mb_x_, 4);
  5101.         memcpy(c.intra_l_, 0, a.intra_l_, 0, 4)
  5102.     }
  5103.     function RestoreContext(a, b, c) {
  5104.         var d = b.br_;
  5105.         var e = b.mb_info_[1 - 1];
  5106.         var f = b.mb_info_[1 + b.mb_x_];
  5107.         e.dc_nz_ = a.left_.dc_nz_;
  5108.         e.f_ilevel_ = a.left_.f_ilevel_;
  5109.         e.f_inner_ = a.left_.f_inner_;
  5110.         e.f_level_ = a.left_.f_level_;
  5111.         e.nz_ = a.left_.nz_;
  5112.         e.skip_ = a.left_.skip_;
  5113.         f.dc_nz_ = a.info_.dc_nz_;
  5114.         f.f_ilevel_ = a.info_.f_ilevel_;
  5115.         f.f_inner_ = a.info_.f_inner_;
  5116.         f.f_level_ = a.info_.f_level_;
  5117.         f.nz_ = a.info_.nz_;
  5118.         f.skip_ = a.info_.skip_;
  5119.         b.br_.buf_end_ = a.br_.buf_end_;
  5120.         b.br_.buf_off = a.br_.buf_off;
  5121.         b.br_.eof_ = a.br_.eof_;
  5122.         b.br_.missing_ = a.br_.missing_;
  5123.         b.br_.range_ = a.br_.range_;
  5124.         b.br_.value_ = a.br_.value_;
  5125.         c.buf_end_ = (a.token_br_.buf_end_);
  5126.         c.buf_off = (a.token_br_.buf_off);
  5127.         c.eof_ = (a.token_br_.eof_);
  5128.         c.missing_ = (a.token_br_.missing_);
  5129.         c.range_ = (a.token_br_.range_);
  5130.         c.value_ = (a.token_br_.value_);
  5131.         memcpy(b.intra_t_, +4 * b.mb_x_, a.intra_t_, 0, 4);
  5132.         memcpy(b.intra_l_, 0, a.intra_l_, 0, 4)
  5133.     }
  5134.     function IDecError(a, b) {
  5135.         if (a.state_ == STATE_DATA) {
  5136.             var c = a.io_;
  5137.             if (c.teardown) {
  5138.                 c.teardown(c)
  5139.             }
  5140.         }
  5141.         a.state_ = STATE_ERROR;
  5142.         return b
  5143.     }
  5144.     function DecodeHeader(a) {
  5145.         var b = uint32_t,
  5146.             bits = uint32_t;
  5147.         var c = a.mem_.buf_;
  5148.         var d = {
  5149.             value: (a.mem_.buf_off + a.mem_.start_)
  5150.         };
  5151.         var e = {
  5152.             value: MemDataSize(a.mem_)
  5153.         };
  5154.         var f = {
  5155.             value: uint32_t
  5156.         };
  5157.         var g = {
  5158.             value: uint32_t
  5159.         };
  5160.         var h = {
  5161.             value: 0
  5162.         };
  5163.         var i = {
  5164.             value: 0
  5165.         };
  5166.         if (e.value < co) {
  5167.             return VP8_STATUS_SUSPENDED
  5168.         }
  5169.         if (!WebPCheckAndSkipRIFFHeader(c, d, e, g)) {
  5170.             return IDecError(a, VP8_STATUS_BITSTREAM_ERROR)
  5171.         }
  5172.         if (!VP8XGetInfo(c, d, e, h, null, null, null)) {
  5173.             return IDecError(a, VP8_STATUS_BITSTREAM_ERROR)
  5174.         }
  5175.         if (h.value == -1) {
  5176.             return VP8_STATUS_SUSPENDED
  5177.         }
  5178.         if (!VP8CheckAndSkipHeader(c, d, e, i, f, g)) {
  5179.             return IDecError(a, VP8_STATUS_BITSTREAM_ERROR)
  5180.         }
  5181.         if ((i.value == -1) && (f.value == 0)) {
  5182.             return VP8_STATUS_SUSPENDED
  5183.         }
  5184.         if (e.value < cT) {
  5185.             return VP8_STATUS_SUSPENDED
  5186.         }
  5187.         if (!VP8GetInfo(c, d, e, f, null, null, null)) {
  5188.             return IDecError(a, VP8_STATUS_BITSTREAM_ERROR)
  5189.         }
  5190.         e = e.value;
  5191.         d = d.value;
  5192.         b = a.mem_.end_ - e;
  5193.         bits = c[d + 0] | (c[d + 1] << 8) | (c[d + 2] << 16);
  5194.         a.mem_.part0_size_ = (bits >> 5) + cT;
  5195.         a.mem_.start_ += b;
  5196.         assert(a.mem_.start_ <= a.mem_.end_);
  5197.         a.io_.data_size -= b;
  5198.         a.io_.data = c;
  5199.         a.io_.data_off = d;
  5200.         a.state_ = STATE_PARTS0;
  5201.         return T
  5202.     }
  5203.     function CopyParts0Data(a) {
  5204.         var b = a.dec_.br_;
  5205.         var c = b.buf_end_ - b.buf_off;
  5206.         var d = a.mem_;
  5207.         assert(c > 0);
  5208.         assert(c <= d.part0_size_);
  5209.         if (d.mode_ == MEM_MODE_APPEND) {
  5210.             var e = malloc(c, uint8_t);
  5211.             var f = 0;
  5212.             if (!e) {
  5213.                 return 0
  5214.             }
  5215.             memcpy(e, f, b.buf_, b.buf_off, c);
  5216.             d.part0_buf_ = e;
  5217.             d.part0_buf_off = f;
  5218.             d.start_ += c;
  5219.             b.buf_ = e;
  5220.             b.buf_off = f;
  5221.             b.buf_end_ = f + c
  5222.         } else {}
  5223.         return 1
  5224.     }
  5225.     function DecodePartition0(a) {
  5226.         var b = a.dec_;
  5227.         var c = a.io_;
  5228.         var d = a.params_;
  5229.         var e = d.output;
  5230.         if (MemDataSize(a.mem_) < a.mem_.part0_size_) {
  5231.             return VP8_STATUS_SUSPENDED
  5232.         }
  5233.         if (!VP8GetHeaders(b, c)) {
  5234.             var f = b.status_;
  5235.             if (f == VP8_STATUS_SUSPENDED || f == VP8_STATUS_NOT_ENOUGH_DATA) {
  5236.                 return VP8_STATUS_SUSPENDED
  5237.             }
  5238.             return IDecError(a, f)
  5239.         }
  5240.         b.status_ = WebPAllocateDecBuffer(c.width, c.height, d.options_, e);
  5241.         if (b.status_ != T) {
  5242.             return IDecError(a, b.status_)
  5243.         }
  5244.         if (!CopyParts0Data(a)) {
  5245.             return IDecError(a, VP8_STATUS_OUT_OF_MEMORY)
  5246.         }
  5247.         if (VP8EnterCritical(b, c) != T) {
  5248.             return IDecError(a, b.status_)
  5249.         }
  5250.         a.state_ = STATE_DATA;
  5251.         if (!VP8InitFrame(b, c)) {
  5252.             return IDecError(a, b.status_)
  5253.         }
  5254.         return T
  5255.     }
  5256.     function DecodeRemaining(a) {
  5257.         var b = newObjectIt(bb);
  5258.         var c = a.dec_;
  5259.         var d = a.io_;
  5260.         assert(c.ready_);
  5261.         b = c.br_;
  5262.         for (; c.mb_y_ < c.mb_h_; ++c.mb_y_) {
  5263.             var e = c.parts_[c.mb_y_ & (c.num_parts_ - 1)];
  5264.             if (c.mb_x_ == 0) {
  5265.                 VP8InitScanline(c)
  5266.             }
  5267.             for (; c.mb_x_ < c.mb_w_; c.mb_x_++) {
  5268.                 var f = (da);
  5269.                 SaveContext(c, e, f);
  5270.                 if (!VP8DecodeMB(c, e)) {
  5271.                     RestoreContext(f, c, e);
  5272.                     if (c.num_parts_ == 1 && MemDataSize(a.mem_) > cV) {
  5273.                         return IDecError(a, VP8_STATUS_BITSTREAM_ERROR)
  5274.                     }
  5275.                     return VP8_STATUS_SUSPENDED
  5276.                 }
  5277.                 VP8ReconstructBlock(c);
  5278.                 VP8StoreBlock(c);
  5279.                 if (c.num_parts_ == 1) {
  5280.                     a.mem_.start_ = e.buf_off - a.mem_.buf_off;
  5281.                     assert(a.mem_.start_ <= a.mem_.end_)
  5282.                 }
  5283.             }
  5284.             if (!VP8ProcessRow(c, d)) {
  5285.                 return IDecError(a, VP8_STATUS_USER_ABORT)
  5286.             }
  5287.             c.mb_x_ = 0
  5288.         }
  5289.         if (!VP8ExitCritical(c, d)) {
  5290.             return IDecError(a, VP8_STATUS_USER_ABORT)
  5291.         }
  5292.         c.ready_ = 0;
  5293.         a.state_ = STATE_DONE;
  5294.         return T
  5295.     }
  5296.     function IDecode(a) {
  5297.         var b = VP8_STATUS_SUSPENDED;
  5298.         assert(a.dec_);
  5299.         if (a.state_ == cW) {
  5300.             b = DecodeHeader(a)
  5301.         }
  5302.         if (a.state_ == STATE_PARTS0) {
  5303.             b = DecodePartition0(a)
  5304.         }
  5305.         if (a.state_ == STATE_DATA) {
  5306.             b = DecodeRemaining(a)
  5307.         }
  5308.         return b
  5309.     }
  5310.     function WebPINewDecoder(a) {
  5311.         var b = newObjectIt(cZ);
  5312.         if (b == null) {
  5313.             return null
  5314.         }
  5315.         b.dec_ = VP8New();
  5316.         if (b.dec_ == null) {
  5317.             b = '';
  5318.             return null
  5319.         }
  5320.         b.state_ = cW;
  5321.         InitMemBuffer(b.mem_);
  5322.         WebPInitDecBuffer(b.output_);
  5323.         VP8InitIo(b.io_);
  5324.         WebPResetDecParams(b.params_);
  5325.         b.params_.output = a ? a : b.output_;
  5326.         WebPInitCustomIo(b.params_, b.io_);
  5327.         b.dec_.use_threads_ = 0;
  5328.         return b
  5329.     }
  5330.     this.WebPIDecode = function (a, b, c) {
  5331.         var d = newObjectIt(cZ);
  5332.         if (a != null && b > 0 && c != null) {
  5333.             if (this.WebPGetFeatures(a, b, c.input) != T) {
  5334.                 return null
  5335.             }
  5336.         }
  5337.         d = WebPINewDecoder(c ? c.output : null);
  5338.         if (!d) {
  5339.             return null
  5340.         }
  5341.         if (c != null) {
  5342.             d.params_.options_ = c.options_
  5343.         }
  5344.         return d
  5345.     };
  5346.     this.WebPIDelete = function (a) {
  5347.         if (!a) return;
  5348.         VP8Delete(a.dec_);
  5349.         ClearMemBuffer(a.mem_);
  5350.         this.WebPFreeDecBuffer(a.output_);
  5351.         a = ''
  5352.     };
  5353.     this.WebPINew = function (a) {
  5354.         a = a == 'MODE_RGB' ? O : a;
  5355.         a = a == 'MODE_RGBA' ? MODE_RGBA : a;
  5356.         a = a == 'MODE_BGR' ? MODE_BGR : a;
  5357.         a = a == 'MODE_BGRA' ? MODE_BGRA : a;
  5358.         a = a == 'MODE_YUV' ? MODE_YUV : a;
  5359.         var b = WebPINewDecoder(null);
  5360.         if (!b) return null;
  5361.         b.output_.colorspace = a;
  5362.         return b
  5363.     };
  5364.     this.WebPINewRGB = function (a, b, c, d) {
  5365.         var e = newObjectIt(cZ);
  5366.         if (a >= MODE_YUV) return null;
  5367.         e = WebPINewDecoder(null);
  5368.         if (e) return null;
  5369.         e.output_.colorspace = a;
  5370.         e.output_.is_external_memory = 1;
  5371.         e.output_.u.RGBA.rgba = b;
  5372.         e.output_.u.RGBA.stride = d;
  5373.         e.output_.u.RGBA.size = c;
  5374.         return e
  5375.     };
  5376.     this.WebPINewYUV = function (a, b, c, d, u, e, f, g, v, h, i, j) {
  5377.         var k = WebPINewDecoder(null);
  5378.         if (k) return null;
  5379.         k.output_.colorspace = MODE_YUV;
  5380.         k.output_.is_external_memory = 1;
  5381.         k.output_.u.YUVA.y = a;
  5382.         k.output_.u.YUVA.y = b;
  5383.         k.output_.u.YUVA.y_stride = d;
  5384.         k.output_.u.YUVA.y_size = c;
  5385.         k.output_.u.YUVA.u = u;
  5386.         k.output_.u.YUVA.u = e;
  5387.         k.output_.u.YUVA.u_stride = g;
  5388.         k.output_.u.YUVA.u_size = f;
  5389.         k.output_.u.YUVA.v = v;
  5390.         k.output_.u.YUVA.v = h;
  5391.         k.output_.u.YUVA.v_stride = j;
  5392.         k.output_.u.YUVA.v_size = i;
  5393.         return k
  5394.     };
  5395.  
  5396.     function IDecCheckStatus(a) {
  5397.         assert(a);
  5398.         if (a.dec_ == null) {
  5399.             return VP8_STATUS_USER_ABORT
  5400.         }
  5401.         if (a.state_ == STATE_ERROR) {
  5402.             return VP8_STATUS_BITSTREAM_ERROR
  5403.         }
  5404.         if (a.state_ == STATE_DONE) {
  5405.             return T
  5406.         }
  5407.         return VP8_STATUS_SUSPENDED
  5408.     }
  5409.     this.WebPIAppend = function (a, b, c) {
  5410.         var d = 0;
  5411.         if (a == null || b == null) {
  5412.             return VP8_STATUS_INVALID_PARAM
  5413.         }
  5414.         d = IDecCheckStatus(a);
  5415.         if (d != VP8_STATUS_SUSPENDED) {
  5416.             return d
  5417.         }
  5418.         if (!CheckMemBufferMode(a.mem_, MEM_MODE_APPEND)) {
  5419.             return VP8_STATUS_INVALID_PARAM
  5420.         }
  5421.         if (!AppendToMemBuffer(a, b, c)) {
  5422.             return VP8_STATUS_OUT_OF_MEMORY
  5423.         }
  5424.         return IDecode(a)
  5425.     };
  5426.     this.WebPIUpdate = function (a, b, c) {
  5427.         var d = 0;
  5428.         if (a == null || b == null) {
  5429.             return VP8_STATUS_INVALID_PARAM
  5430.         }
  5431.         d = IDecCheckStatus(a);
  5432.         if (d != VP8_STATUS_SUSPENDED) {
  5433.             return d
  5434.         }
  5435.         if (!CheckMemBufferMode(a.mem_, MEM_MODE_MAP)) {
  5436.             return VP8_STATUS_INVALID_PARAM
  5437.         }
  5438.         if (!RemapMemBuffer(a, b, 0, c)) {
  5439.             return VP8_STATUS_INVALID_PARAM
  5440.         }
  5441.         return IDecode(a)
  5442.     };
  5443.  
  5444.     function GetOutputBuffer(a) {
  5445.         if (!a || !a.dec_ || a.state_ <= STATE_PARTS0) {
  5446.             return null
  5447.         }
  5448.         return a.params_.output
  5449.     }
  5450.     this.WebPIDecodedArea = function (a, b, c, d, e) {
  5451.         var f = GetOutputBuffer(a);
  5452.         if (b) b.value = 0;
  5453.         if (c) c.value = 0;
  5454.         if (f) {
  5455.             if (d) d.value = f.width;
  5456.             if (e) e.value = a.params_.last_y
  5457.         } else {
  5458.             if (d) d.value = 0;
  5459.             if (e) e.value = 0
  5460.         }
  5461.         return f
  5462.     };
  5463.     this.WebPIDecGetRGB = function (a, b, c, d, e) {
  5464.         var f = GetOutputBuffer(a);
  5465.         if (!f) return null;
  5466.         if (f.colorspace >= MODE_YUV) {
  5467.             return null
  5468.         }
  5469.         if (typeof b.value !== "undefined") b.value = a.params_.last_y;
  5470.         if (typeof c.value !== "undefined") c.value = f.width;
  5471.         if (typeof d.value !== "undefined") d.value = f.height;
  5472.         if (typeof e.value !== "undefined") e.value = f.u.RGBA.stride;
  5473.         return f.u.RGBA.rgba
  5474.     };
  5475.     this.WebPIDecGetYUV = function (a, b, u, v, c, d, e, f) {
  5476.         var g = GetOutputBuffer(a);
  5477.         if (!g) return null;
  5478.         if (g.colorspace < MODE_YUV) {
  5479.             return null
  5480.         }
  5481.         if (typeof b.value !== "undefined") b.value = g.u.YUVA.u;
  5482.         if (typeof u.value !== "undefined") u.value = g.u.YUVA.u;
  5483.         if (typeof v.value !== "undefined") v.value = g.u.YUVA.v;
  5484.         if (typeof c.value !== "undefined") c.value = g.width;
  5485.         if (typeof d.value !== "undefined") d.value = g.height;
  5486.         if (typeof e.value !== "undefined") e.value = g.u.YUVA.y_stride;
  5487.         if (typeof f.value !== "undefined") f.value = g.u.YUVA.u_stride;
  5488.         return g.u.YUVA.y
  5489.     };
  5490.  
  5491.     function WebPISetIOHooks(a, b, c, d, e) {
  5492.         if (!a || !a.dec_ || a.state_ > cW) {
  5493.             return 0
  5494.         }
  5495.         a.io_.put = b;
  5496.         a.io_.setup = c;
  5497.         a.io_.teardown = d;
  5498.         a.io_.opaque = e;
  5499.         return 1
  5500.     }
  5501.     var co = 12;
  5502.  
  5503.     function WebPCheckAndSkipRIFFHeader(a, b, c, d) {
  5504.         if (c.value >= co && !memcmp(a, b.value, "RIFF", 4)) {
  5505.             if (memcmp(a, b.value + 8, "WEBP", 4)) {
  5506.                 return 0
  5507.             } else {
  5508.                 d.value = get_le32(a, b.value + 4);
  5509.                 if (d.value < co) {
  5510.                     return 0
  5511.                 }
  5512.                 b.value += co;
  5513.                 c.value -= co
  5514.             }
  5515.         } else {
  5516.             d.value = 0
  5517.         }
  5518.         return 1
  5519.     }
  5520.     function WebPResetDecParams(a) {
  5521.         if (a) {}
  5522.     }
  5523.     var cq = '',
  5524.         cr = '';
  5525.  
  5526.     function DecodeInto(a, b, c, d) {
  5527.         cr = new VP8New();
  5528.         var e = T;
  5529.         cq = newObjectIt(Y);
  5530.         var f = 1;
  5531.         assert(d);
  5532.         if (cr == null) {
  5533.             return VP8_STATUS_INVALID_PARAM
  5534.         }
  5535.         VP8InitIo(cq);
  5536.         cq.data = a;
  5537.         cq.data_off = b;
  5538.         cq.data_size = c;
  5539.         WebPInitCustomIo(d, cq);
  5540.         cr.use_threads_ = 0;
  5541.         if (!VP8GetHeaders(cr, cq)) {
  5542.             e = VP8_STATUS_BITSTREAM_ERROR
  5543.         } else {
  5544.             e = WebPAllocateDecBuffer(cq.width, cq.height, d.options_, d.output);
  5545.             if (e == T) {
  5546.                 if (!VP8Decode(cr, cq)) {
  5547.                     e = cr.status_
  5548.                 }
  5549.             }
  5550.         }
  5551.         VP8Delete(cr);
  5552.         if (e != T) {
  5553.             this.WebPFreeDecBuffer(d.output)
  5554.         }
  5555.         return e
  5556.     };
  5557.  
  5558.     function DecodeIntoRGBABuffer(a, b, c, d, e, f) {
  5559.         var g = newObjectIt(ba);
  5560.         var h = newObjectIt(R);
  5561.         if (d == null) {
  5562.             return null
  5563.         }
  5564.         WebPInitDecBuffer(h);
  5565.         WebPResetDecParams(g);
  5566.         g.output = h;
  5567.         h.colorspace = a;
  5568.         h.u.RGBA.rgba = d;
  5569.         h.u.RGBA.rgba_off = 0;
  5570.         h.u.RGBA.stride = e;
  5571.         h.u.RGBA.size = f;
  5572.         h.is_external_memory = 1;
  5573.         if (DecodeInto(b, 0, c, g) != T) {
  5574.             return null
  5575.         }
  5576.         return d
  5577.     }
  5578.     function WebPDecodeRGBInto(a, b, c, d, e) {
  5579.         return DecodeIntoRGBABuffer(O, a, b, c, e, d)
  5580.     }
  5581.     function WebPDecodeRGBAInto(a, b, c, d, e) {
  5582.         return DecodeIntoRGBABuffer(MODE_RGBA, a, b, c, e, d)
  5583.     }
  5584.     function WebPDecodeARGBInto(a, b, c, d, e) {
  5585.         return DecodeIntoRGBABuffer(MODE_ARGB, a, b, c, e, d)
  5586.     }
  5587.     function WebPDecodeBGRInto(a, b, c, d, e) {
  5588.         return DecodeIntoRGBABuffer(MODE_BGR, a, b, c, e, d)
  5589.     }
  5590.     function WebPDecodeBGRAInto(a, b, c, d, e) {
  5591.         return DecodeIntoRGBABuffer(MODE_BGRA, a, b, c, e, d)
  5592.     }
  5593.     function WebPDecodeYUVInto(a, b, c, d, e, f, u, g, h, i, v, j, k, l) {
  5594.         var m = newObjectIt(ba);
  5595.         var n = newObjectIt(R);
  5596.         if (c == null) return null;
  5597.         WebPInitDecBuffer(n);
  5598.         WebPResetDecParams(m);
  5599.         m.output = n;
  5600.         n.colorspace = MODE_YUV;
  5601.         n.u.YUVA.y = c;
  5602.         n.u.YUVA.y_off = d;
  5603.         n.u.YUVA.y_stride = f;
  5604.         n.u.YUVA.y_size = e;
  5605.         n.u.YUVA.u = u;
  5606.         n.u.YUVA.u_off = g;
  5607.         n.u.YUVA.u_stride = i;
  5608.         n.u.YUVA.u_size = h;
  5609.         n.u.YUVA.v = v;
  5610.         n.u.YUVA.v_off = j;
  5611.         n.u.YUVA.v_stride = l;
  5612.         n.u.YUVA.v_size = k;
  5613.         n.is_external_memory = 1;
  5614.         if (DecodeInto(a, 0, b, m) != T) {
  5615.             return null
  5616.         }
  5617.         return c
  5618.     }
  5619.     var db = -1,
  5620.         data_size = -1,
  5621.         params_out = -1;
  5622.     var dc = -1;
  5623.  
  5624.     function Decode(a, b, c, d, e, f) {
  5625.         data_off = {
  5626.             value: 0
  5627.         };
  5628.         c = {
  5629.             value: c
  5630.         };
  5631.         var g = newObjectIt(ba);
  5632.         var h = newObjectIt(R);
  5633.         WebPInitDecBuffer(h);
  5634.         WebPResetDecParams(g);
  5635.         g.output = h;
  5636.         h.colorspace = a;
  5637.         var o = {
  5638.             data_off: {
  5639.                 value: 0
  5640.             },
  5641.             width: {
  5642.                 value: h.width
  5643.             },
  5644.             height: {
  5645.                 value: h.height
  5646.             }
  5647.         };
  5648.         if (!WebPGetInfo(b, data_off, c, o.width, o.height)) {
  5649.             return null
  5650.         }
  5651.         h.width = o.width.value;
  5652.         h.height = o.height.value;
  5653.         if (d) d.value = h.width.value;
  5654.         if (e) e.value = h.height.value;
  5655.         if (DecodeInto(b, data_off.value, c.value, g) != T) {
  5656.             return null
  5657.         }
  5658.         if (f) {
  5659.             WebPCopyDecBuffer(h, f)
  5660.         }
  5661.         return (a >= MODE_YUV) ? h.u.YUVA.y : h.u.RGBA.rgba
  5662.     }
  5663.     this.WebPDecodeRGB = function (a, b, c, d) {
  5664.         return Decode(O, a, b, c, d, null)
  5665.     };
  5666.     this.WebPDecodeRGBA = function (a, b, c, d) {
  5667.         return Decode(MODE_RGBA, a, b, c, d, null)
  5668.     };
  5669.     this.WebPDecodeRGBA_4444 = function (a, b, c, d) {
  5670.         return Decode(MODE_RGBA_4444, a, b, c, d, null)
  5671.     };
  5672.     this.WebPDecodeARGB = function (a, b, c, d) {
  5673.         return Decode(MODE_ARGB, a, b, c, d, null)
  5674.     };
  5675.     this.WebPDecodeBGR = function (a, b, c, d) {
  5676.         return Decode(MODE_BGR, a, b, c, d, null)
  5677.     };
  5678.     this.WebPDecodeBGRA = function (a, b, c, d) {
  5679.         return Decode(MODE_BGRA, a, b, c, d, null)
  5680.     };
  5681.  
  5682.     function DefaultFeatures(a) {
  5683.         assert(a);
  5684.         a.bitstream_version = 0
  5685.     }
  5686.     function GetFeatures(a, b, c, d) {
  5687.         var e = {
  5688.             value: 0
  5689.         };
  5690.         var f = {
  5691.             value: 0
  5692.         };
  5693.         var g = {
  5694.             value: 0
  5695.         };
  5696.         var h = {
  5697.             value: 0
  5698.         };
  5699.         var i = {
  5700.             value: 0
  5701.         };
  5702.         if (d == null) {
  5703.             return VP8_STATUS_INVALID_PARAM
  5704.         }
  5705.         DefaultFeatures(d);
  5706.         if (a == null || b == null || c.value == 0) {
  5707.             return VP8_STATUS_INVALID_PARAM
  5708.         }
  5709.         if (!WebPCheckAndSkipRIFFHeader(a, b, c, f)) {
  5710.             return VP8_STATUS_BITSTREAM_ERROR
  5711.         }
  5712.         if (!VP8XGetInfo(a, b, c, h, d.width, d.height, g)) {
  5713.             return VP8_STATUS_BITSTREAM_ERROR
  5714.         }
  5715.         if (h.value > 0) {
  5716.             return T
  5717.         }
  5718.         if (!VP8CheckAndSkipHeader(a, b, c, i, e, f)) {
  5719.             return VP8_STATUS_BITSTREAM_ERROR
  5720.         }
  5721.         if (i.value == -1) {
  5722.             return VP8_STATUS_BITSTREAM_ERROR
  5723.         }
  5724.         if (!i.value) {
  5725.             e.value = c.value
  5726.         }
  5727.         if (!VP8GetInfo(a, b, c, e, d.width, d.height, d.has_alpha)) {
  5728.             return VP8_STATUS_BITSTREAM_ERROR
  5729.         }
  5730.         return T
  5731.     }
  5732.     function WebPGetInfo(a, b, c, d, e) {
  5733.         var f = newObjectIt(U);
  5734.         if (GetFeatures(a, b, c, f) != T) {
  5735.             return 0
  5736.         }
  5737.         if (d) {
  5738.             d.value = f.width
  5739.         }
  5740.         if (e) {
  5741.             e.value = f.height
  5742.         }
  5743.         return 1
  5744.     }
  5745.     function WebPInitDecoderConfigInternal(a, b) {
  5746.         if (b != N) {
  5747.             return 0
  5748.         }
  5749.         if (a == null) {
  5750.             return 0
  5751.         }
  5752.         DefaultFeatures(a.input);
  5753.         WebPInitDecBuffer(a.output);
  5754.         return 1
  5755.     }
  5756.     function WebPGetFeaturesInternal(a, b, c, d) {
  5757.         if (d != N) {
  5758.             return VP8_STATUS_INVALID_PARAM
  5759.         }
  5760.         if (c == null) {
  5761.             return VP8_STATUS_INVALID_PARAM
  5762.         }
  5763.         var e = {
  5764.             value: 0
  5765.         };
  5766.         var b = {
  5767.             value: b
  5768.         };
  5769.         return GetFeatures(a, e, b, c)
  5770.     }
  5771.     this.WebPDecode = function (a, b, c) {
  5772.         var d = newObjectIt(ba);
  5773.         var e = 'VP8StatusCode';
  5774.         if (!c) {
  5775.             return VP8_STATUS_INVALID_PARAM
  5776.         }
  5777.         var f = {
  5778.             value: 0
  5779.         };
  5780.         b = {
  5781.             value: b
  5782.         };
  5783.         e = GetFeatures(a, f, b, c.input);
  5784.         if (e != T) {
  5785.             return e
  5786.         }
  5787.         WebPResetDecParams(d);
  5788.         d.output = c.output;
  5789.         d.options_ = c.options;
  5790.         e = DecodeInto(a, f.value, b.value, d);
  5791.         return e
  5792.     };
  5793.     var dd, height;
  5794.     var db = -1,
  5795.         data_size = -1,
  5796.         dd = -1,
  5797.         height = -1,
  5798.         params_out = -1;
  5799.     var dc = -1
  5800. }
  5801. function WebPEncoder() {
  5802.     var N = 0x0002;
  5803.     var O = {
  5804.         quality: float,
  5805.         target_size: int,
  5806.         target_PSNR: float,
  5807.         method: int,
  5808.         segments: int,
  5809.         sns_strength: int,
  5810.         filter_strength: int,
  5811.         filter_sharpness: int,
  5812.         filter_type: int,
  5813.         autofilter: int,
  5814.         pass: int,
  5815.         show_compressed: int,
  5816.         preprocessing: int,
  5817.         partitions: int,
  5818.         partition_limit: int,
  5819.         alpha_compression: int
  5820.     };
  5821.     var P = {
  5822.         WEBP_PRESET_DEFAULT: 0,
  5823.         WEBP_PRESET_PICTURE: 1,
  5824.         WEBP_PRESET_PHOTO: 2,
  5825.         WEBP_PRESET_DRAWING: 3,
  5826.         WEBP_PRESET_ICON: 4,
  5827.         WEBP_PRESET_TEXT: 5
  5828.     };
  5829.  
  5830.     function WebPConfigPreset(a, b, c) {
  5831.         return WebPConfigInitInternal(a, b, c, N)
  5832.     }
  5833.     var S = {
  5834.         PSNR: Arr(4, float),
  5835.         coded_size: int,
  5836.         block_count: Arr(3, int),
  5837.         header_bytes: Arr(2, int),
  5838.         residual_bytes: ArrM(new Array(3, 4), int),
  5839.         segment_size: Arr(4, int),
  5840.         segment_quant: Arr(4, int),
  5841.         segment_level: Arr(4, int),
  5842.         alpha_data_size: int,
  5843.         layer_data_size: int
  5844.     };
  5845.     var T = 0,
  5846.         WEBP_YUV422 = 1,
  5847.         WEBP_YUV444 = 2,
  5848.         WEBP_YUV400 = 3,
  5849.         WEBP_CSP_UV_MASK = 3,
  5850.         WEBP_YUV420A = 4,
  5851.         WEBP_YUV422A = 5,
  5852.         WEBP_YUV444A = 6,
  5853.         WEBP_YUV400A = 7,
  5854.         WEBP_CSP_ALPHA_BIT = 4;
  5855.     var U = 0,
  5856.         VP8_ENC_ERROR_OUT_OF_MEMORY = 1,
  5857.         VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY = 2,
  5858.         VP8_ENC_ERROR_NULL_PARAMETER = 3,
  5859.         VP8_ENC_ERROR_INVALID_CONFIGURATION = 4,
  5860.         VP8_ENC_ERROR_BAD_DIMENSION = 5,
  5861.         VP8_ENC_ERROR_PARTITION0_OVERFLOW = 6,
  5862.         VP8_ENC_ERROR_PARTITION_OVERFLOW = 7,
  5863.         VP8_ENC_ERROR_BAD_WRITE = 8;
  5864.     var V = {
  5865.         colorspace: 'WebPEncCSP',
  5866.         width: int,
  5867.         height: int,
  5868.         y: uint8_t,
  5869.         u: uint8_t,
  5870.         v: uint8_t,
  5871.         y_off: 0,
  5872.         u_off: 0,
  5873.         v_off: 0,
  5874.         y_stride: int,
  5875.         uv_stride: int,
  5876.         a: uint8_t,
  5877.         a_off: 0,
  5878.         a_stride: int,
  5879.         writer: function WebPWriterFunction() {},
  5880.         custom_ptr: void_,
  5881.         extra_info_type: int,
  5882.         extra_info: uint8_t,
  5883.         stats: newObjectIt(S),
  5884.         stats_nozero: 1,
  5885.         u0: uint8_t,
  5886.         v0: uint8_t,
  5887.         u0_off: 0,
  5888.         v0_off: 0,
  5889.         uv0_stride: int,
  5890.         error_code: 'WebPEncodingError'
  5891.     };
  5892.  
  5893.     function WebPPictureInit(a) {
  5894.         return WebPPictureInitInternal(a, N)
  5895.     }
  5896.     var Y = {
  5897.         range_: int32_t,
  5898.         value_: int32_t,
  5899.         run_: int,
  5900.         nb_bits_: int,
  5901.         buf_: uint8_t,
  5902.         buf_off: 0,
  5903.         pos_: size_t,
  5904.         max_pos_: size_t,
  5905.         error_: int
  5906.     };
  5907.  
  5908.     function VP8BitWriterPos(a) {
  5909.         return (a.pos_ + a.run_) * 8 + 8 + a.nb_bits_
  5910.     }
  5911.     function VP8BitWriterBuf(a) {
  5912.         return a.buf_
  5913.     }
  5914.     function VP8BitWriterSize(a) {
  5915.         return a.pos_
  5916.     }
  5917.     var Z = 0;
  5918.     var ba = 1;
  5919.     var bb = 2;
  5920.     var bc = 64;
  5921.     var bd = 0,
  5922.         B_TM_PRED = 1,
  5923.         B_VE_PRED = 2,
  5924.         B_HE_PRED = 3,
  5925.         B_RD_PRED = 4,
  5926.         B_VR_PRED = 5,
  5927.         B_LD_PRED = 6,
  5928.         B_VL_PRED = 7,
  5929.         B_HD_PRED = 8,
  5930.         B_HU_PRED = 9,
  5931.         NUM_BMODES = (B_HU_PRED + 1 - bd),
  5932.         DC_PRED = bd,
  5933.         V_PRED = B_VE_PRED,
  5934.         H_PRED = B_HE_PRED,
  5935.         TM_PRED = B_TM_PRED;
  5936.     var be = 4,
  5937.         MAX_NUM_PARTITIONS = 8,
  5938.         NUM_TYPES = 4,
  5939.         NUM_BANDS = 8,
  5940.         NUM_CTX = 3,
  5941.         NUM_PROBAS = 11,
  5942.         MAX_LF_LEVELS = 64,
  5943.         MAX_VARIABLE_LEVEL = 67;
  5944.     var bf = 16;
  5945.     var bg = (bf * 16);
  5946.     var bh = (bf * 8);
  5947.     var bi = (bg + bh);
  5948.     var bj = (6 * 16 * bf + 12 * bf);
  5949.     var bk = (0);
  5950.     var bl = (bg);
  5951.     var bm = (bl + 8);
  5952.     var bn = 15;
  5953.     var bo = (0 * 16 * bf);
  5954.     var bp = (1 * 16 * bf);
  5955.     var bq = (2 * 16 * bf);
  5956.     var br = (3 * 16 * bf);
  5957.     var bs = (4 * 16 * bf);
  5958.     var bt = (4 * 16 * bf + 8 * bf);
  5959.     var bu = (5 * 16 * bf);
  5960.     var bv = (5 * 16 * bf + 8 * bf);
  5961.     var bw = (6 * 16 * bf + 0);
  5962.     var bx = (6 * 16 * bf + 4);
  5963.     var by = (6 * 16 * bf + 8);
  5964.     var bz = (6 * 16 * bf + 12);
  5965.     var bA = (6 * 16 * bf + 4 * bf + 0);
  5966.     var bB = (6 * 16 * bf + 4 * bf + 4);
  5967.     var bC = (6 * 16 * bf + 4 * bf + 8);
  5968.     var bD = (6 * 16 * bf + 4 * bf + 12);
  5969.     var bE = (6 * 16 * bf + 8 * bf + 0);
  5970.     var bF = (6 * 16 * bf + 8 * bf + 4);
  5971.     var bG = (6 * 16 * bf + 8 * bf + 8);
  5972.     var bH = 0x7fffffffffffff;
  5973.     var bI = 17;
  5974.  
  5975.     function BIAS(b) {
  5976.         return ((b) << (bI - 8))
  5977.     }
  5978.     function QUANTDIV(n, a, B) {
  5979.         return ((n * a + B) >> bI)
  5980.     }
  5981.     var bJ = ArrM(new Array(NUM_CTX, NUM_PROBAS), uint8_t);
  5982.     var bK = ArrM(new Array(NUM_CTX, NUM_PROBAS, 2), uint64_t);
  5983.     var bL = ArrM(new Array(NUM_CTX, (MAX_VARIABLE_LEVEL + 1)), uint16_t);
  5984.     var bM = ArrM(new Array(be, MAX_LF_LEVELS), double);
  5985.     var bN = {
  5986.         num_segments_: int,
  5987.         update_map_: int,
  5988.         size_: int
  5989.     };
  5990.     var bO = {
  5991.         segments_: Arr(3, uint8_t),
  5992.         skip_proba_: uint8_t,
  5993.         coeffs_: ArrM(new Array(NUM_TYPES, NUM_BANDS), bJ),
  5994.         stats_: ArrM(new Array(NUM_TYPES, NUM_BANDS), bK),
  5995.         level_cost_: ArrM(new Array(NUM_TYPES, NUM_BANDS), bL),
  5996.         use_skip_proba_: int,
  5997.         nb_skip_: int
  5998.     };
  5999.     var bP = {
  6000.         simple_: int,
  6001.         level_: int,
  6002.         sharpness_: int,
  6003.         i4x4_lf_delta_: int
  6004.     };
  6005.     var bQ = {
  6006.         type_: 0,
  6007.         uv_mode_: 0,
  6008.         skip_: 0,
  6009.         segment_: 0,
  6010.         alpha_: uint8_t
  6011.     };
  6012.     var bR = {
  6013.         q_: Arr(16, uint16_t),
  6014.         iq_: Arr(16, uint16_t),
  6015.         bias_: Arr(16, uint16_t),
  6016.         zthresh_: Arr(16, uint16_t),
  6017.         sharpen_: Arr(16, uint16_t)
  6018.     };
  6019.     var bS = {
  6020.         y1_: newObjectIt(bR),
  6021.         y2_: newObjectIt(bR),
  6022.         uv_: newObjectIt(bR),
  6023.         alpha_: int,
  6024.         beta_: int,
  6025.         quant_: int,
  6026.         fstrength_: int,
  6027.         lambda_i16_: int,
  6028.         lambda_i4_: int,
  6029.         lambda_uv_: int,
  6030.         lambda_mode_: int,
  6031.         lambda_trellis_: int,
  6032.         tlambda_: int,
  6033.         lambda_trellis_i16_: int,
  6034.         lambda_trellis_i4_: int,
  6035.         lambda_trellis_uv_: int
  6036.     };
  6037.     var bT = {
  6038.         config_: newObjectIt(O),
  6039.         pic_: newObjectIt(V),
  6040.         filter_hdr_: newObjectIt(bP),
  6041.         segment_hdr_: newObjectIt(bN),
  6042.         profile_: int,
  6043.         mb_w_: int,
  6044.         mb_h_: int,
  6045.         preds_w_: int,
  6046.         num_parts_: int,
  6047.         bw_: newObjectIt(Y),
  6048.         parts_: Arr_nOI(MAX_NUM_PARTITIONS, Y),
  6049.         has_alpha_: int,
  6050.         alpha_data_: uint8_t,
  6051.         alpha_data_off: 0,
  6052.         alpha_data_size_: size_t,
  6053.         use_layer_: int,
  6054.         layer_bw_: Y,
  6055.         layer_data_: uint8_t,
  6056.         layer_data_off: 0,
  6057.         layer_data_size_: size_t,
  6058.         dqm_: Arr_nOI(be, bS),
  6059.         base_quant_: int,
  6060.         uv_alpha_: int,
  6061.         dq_y1_dc_: int,
  6062.         dq_y2_dc_: int,
  6063.         dq_y2_ac_: int,
  6064.         dq_uv_dc_: int,
  6065.         dq_uv_ac_: int,
  6066.         proba_: newObjectIt(bO),
  6067.         proba_off: 0,
  6068.         sse_: Arr(3, uint64_t),
  6069.         sse_count_: uint64_t,
  6070.         coded_size_: int,
  6071.         residual_bytes_: ArrM(new Array(3, 4), int),
  6072.         block_count_: Arr(3, int),
  6073.         method_: int,
  6074.         rd_opt_level_: int,
  6075.         max_i4_header_bits_: int,
  6076.         mb_info_: newObjectIt(bQ),
  6077.         mb_info_off: 0,
  6078.         preds_: uint8_t,
  6079.         preds_off: 0,
  6080.         nz_: uint32_t,
  6081.         nz_off: 0,
  6082.         yuv_in_: uint8_t,
  6083.         yuv_in_off: 0,
  6084.         yuv_out_: uint8_t,
  6085.         yuv_out_off: 0,
  6086.         yuv_out2_: uint8_t,
  6087.         yuv_out2_off: 0,
  6088.         yuv_p_: uint8_t,
  6089.         yuv_p_off: 0,
  6090.         y_top_: uint8_t,
  6091.         y_top_off: 0,
  6092.         uv_top_: uint8_t,
  6093.         uv_top_off: 0,
  6094.         y_left_: uint8_t,
  6095.         y_left_off: 0,
  6096.         u_left_: uint8_t,
  6097.         u_left_off: 0,
  6098.         v_left_: uint8_t,
  6099.         v_left_off: 0,
  6100.         lf_stats_: newObjectIt(bM)
  6101.     };
  6102.     var bU = {
  6103.         D: score_t,
  6104.         SD: score_t,
  6105.         R: score_t,
  6106.         score: score_t,
  6107.         y_dc_levels: Arr(16, int16_t),
  6108.         y_ac_levels: ArrM(new Array(16, 16), int16_t),
  6109.         uv_levels: ArrM(new Array(4 + 4, 16), int16_t),
  6110.         mode_i16: int,
  6111.         modes_i4: Arr(16, int),
  6112.         mode_uv: int,
  6113.         nz: uint32_t
  6114.     };
  6115.     var bV = {
  6116.         x_: int,
  6117.         y_: int,
  6118.         y_offset_: int,
  6119.         uv_offset_: int,
  6120.         y_stride_: int,
  6121.         uv_stride_: int,
  6122.         yuv_in_: uint8_t,
  6123.         yuv_in_off: 0,
  6124.         yuv_out_: uint8_t,
  6125.         yuv_out_off: 0,
  6126.         yuv_out2_: uint8_t,
  6127.         yuv_out2_off: 0,
  6128.         yuv_p_: uint8_t,
  6129.         yuv_p_off: 0,
  6130.         enc_: newObjectIt(bT),
  6131.         mb_: newObjectIt(bQ),
  6132.         mb_off: 0,
  6133.         bw_: newObjectIt(Y),
  6134.         preds_: uint8_t,
  6135.         preds_off: 0,
  6136.         nz_: uint32_t,
  6137.         nz_off: 0,
  6138.         i4_boundary_: Arr(37, uint8_t),
  6139.         i4_boundary_off: 0,
  6140.         i4_top_: uint8_t,
  6141.         i4_top_off: 0,
  6142.         i4_: int,
  6143.         top_nz_: Arr(9, int),
  6144.         left_nz_: Arr(9, int),
  6145.         bit_count_: ArrM(Array(4, 3), uint64_t),
  6146.         luma_bits_: uint64_t,
  6147.         uv_bits_: uint64_t,
  6148.         lf_stats_: newObjectIt(bM),
  6149.         do_trellis_: int,
  6150.         done_: int
  6151.     };
  6152.     var bW = 8192;
  6153.  
  6154.     function CompressAlpha(a, b, c, d, e, f) {
  6155.         var g = WebPZlib.compress(a.slice(b, b + c), (f ? 3 : 6));
  6156.         d.val = g;
  6157.         e.val = g.length;
  6158.         return 1
  6159.     }
  6160.     function VP8EncInitAlpha(a) {
  6161.         a.has_alpha_ = (a.pic_.a != null) + 0;
  6162.         a.alpha_data_ = null;
  6163.         a.alpha_data_size_ = 0
  6164.     }
  6165.     function VP8EncCodeAlphaBlock(a) {}
  6166.     function VP8EncFinishAlpha(a) {
  6167.         if (a.has_alpha_) {
  6168.             var b = a.pic_;
  6169.             assert(b.a);
  6170.             a.alpha_data_ = {
  6171.                 val: a.alpha_data_
  6172.             };
  6173.             a.alpha_data_size_ = {
  6174.                 val: a.alpha_data_size
  6175.             };
  6176.             if (!CompressAlpha(b.a, 0, b.width * b.height, a.alpha_data_, a.alpha_data_size_, a.config_.alpha_compression)) {
  6177.                 return 0
  6178.             }
  6179.             a.alpha_data_ = a.alpha_data_.val;
  6180.             a.alpha_data_size_ = a.alpha_data_size_.val
  6181.         }
  6182.         return 1
  6183.     }
  6184.     function VP8EncDeleteAlpha(a) {
  6185.         a.alpha_data_ = '';
  6186.         a.alpha_data_ = null;
  6187.         a.alpha_data_size_ = 0;
  6188.         a.has_alpha_ = 0
  6189.     }
  6190.     function VP8EncInitLayer(a) {
  6191.         a.use_layer_ = (a.pic_.u0 != null) + 0;
  6192.         a.layer_data_size_ = 0;
  6193.         a.layer_data_ = null;
  6194.         if (a.use_layer_) {
  6195.             VP8BitWriterInit(a.layer_bw_, a.mb_w_ * a.mb_h_ * 3)
  6196.         }
  6197.     }
  6198.     function VP8EncCodeLayerBlock(a) {}
  6199.     function VP8EncFinishLayer(a) {
  6200.         if (a.use_layer_) {
  6201.             a.layer_data_ = VP8BitWriterFinish(a.layer_bw_);
  6202.             a.layer_data_size_ = VP8BitWriterSize(a.layer_bw_)
  6203.         }
  6204.         return 1
  6205.     }
  6206.     function VP8EncDeleteLayer(a) {
  6207.         a.layer_data_ = ''
  6208.     }
  6209.     var bX = 0x9d012a;
  6210.     var bY = 10;
  6211.     var bZ = 20;
  6212.     var ca = (bZ - 8);
  6213.     var cb = (1 << 19);
  6214.     var cc = (1 << 24);
  6215.  
  6216.     function PutLE32(a, b, c) {
  6217.         a[b + 0] = (c >> 0) & 0xff;
  6218.         a[b + 1] = (c >> 8) & 0xff;
  6219.         a[b + 2] = (c >> 16) & 0xff;
  6220.         a[b + 3] = (c >> 24) & 0xff
  6221.     }
  6222.     function PutHeader(a, b, c, d) {
  6223.         var e = Arr(bY, uint8_t);
  6224.         var f = new Array('R', 'I', 'F', 'F', 0, 0, 0, 0, 'W', 'E', 'B', 'P', 'V', 'P', '8', ' ');
  6225.         var g = uint32_t;
  6226.         if (b >= cb) {
  6227.             return WebPEncodingSetError(d, VP8_ENC_ERROR_PARTITION0_OVERFLOW)
  6228.         }
  6229.         for (var i = 0; i < f.length; ++i) {
  6230.             f[i] = f[i] != '0' ? String(f[i]).charCodeAt(0) : 0
  6231.         }
  6232.         PutLE32(f, +4, c + ca);
  6233.         PutLE32(f, +16, c);
  6234.         if (!d.writer(f, sizeof(f) * f.length, d)) {
  6235.             return WebPEncodingSetError(d, VP8_ENC_ERROR_BAD_WRITE)
  6236.         }
  6237.         g = 0 | (a << 1) | (1 << 4) | (b << 5);
  6238.         e[0] = g & 0xff;
  6239.         e[1] = (g >> 8) & 0xff;
  6240.         e[2] = (g >> 16) & 0xff;
  6241.         e[3] = (bX >> 16) & 0xff;
  6242.         e[4] = (bX >> 8) & 0xff;
  6243.         e[5] = (bX >> 0) & 0xff;
  6244.         e[6] = d.width & 0xff;
  6245.         e[7] = d.width >> 8;
  6246.         e[8] = d.height & 0xff;
  6247.         e[9] = d.height >> 8;
  6248.         return d.writer(e, sizeof(e) * e.length, d)
  6249.     }
  6250.     function PutSegmentHeader(a, b) {
  6251.         var c = b.segment_hdr_;
  6252.         var d = b.proba_;
  6253.         if (VP8PutBitUniform(a, (c.num_segments_ > 1))) {
  6254.             var e = 1;
  6255.             var s;
  6256.             VP8PutBitUniform(a, c.update_map_);
  6257.             if (VP8PutBitUniform(a, e)) {
  6258.                 VP8PutBitUniform(a, 1);
  6259.                 for (s = 0; s < be; ++s) {
  6260.                     VP8PutSignedValue(a, b.dqm_[s].quant_, 7)
  6261.                 }
  6262.                 for (s = 0; s < be; ++s) {
  6263.                     VP8PutSignedValue(a, b.dqm_[s].fstrength_, 6)
  6264.                 }
  6265.             }
  6266.             if (c.update_map_) {
  6267.                 for (s = 0; s < 3; ++s) {
  6268.                     if (VP8PutBitUniform(a, (d.segments_[s] != 255))) {
  6269.                         VP8PutValue(a, d.segments_[s], 8)
  6270.                     }
  6271.                 }
  6272.             }
  6273.         }
  6274.     }
  6275.     function PutFilterHeader(a, b) {
  6276.         var c = (b.i4x4_lf_delta_ != 0) + 0;
  6277.         VP8PutBitUniform(a, b.simple_);
  6278.         VP8PutValue(a, b.level_, 6);
  6279.         VP8PutValue(a, b.sharpness_, 3);
  6280.         if (VP8PutBitUniform(a, c)) {
  6281.             var d = (b.i4x4_lf_delta_ != 0);
  6282.             if (VP8PutBitUniform(a, d)) {
  6283.                 VP8PutValue(a, 0, 4);
  6284.                 VP8PutSignedValue(a, b.i4x4_lf_delta_, 6);
  6285.                 VP8PutValue(a, 0, 3)
  6286.             }
  6287.         }
  6288.     }
  6289.     function PutQuant(a, b) {
  6290.         VP8PutValue(a, b.base_quant_, 7);
  6291.         VP8PutSignedValue(a, b.dq_y1_dc_, 4);
  6292.         VP8PutSignedValue(a, b.dq_y2_dc_, 4);
  6293.         VP8PutSignedValue(a, b.dq_y2_ac_, 4);
  6294.         VP8PutSignedValue(a, b.dq_uv_dc_, 4);
  6295.         VP8PutSignedValue(a, b.dq_uv_ac_, 4)
  6296.     }
  6297.     function EmitPartitionsSize(a, b) {
  6298.         var c = Arr(3 * (MAX_NUM_PARTITIONS - 1), uint8_t);
  6299.         var p;
  6300.         for (p = 0; p < a.num_parts_ - 1; ++p) {
  6301.             var d = VP8BitWriterSize(a.parts_[p]);
  6302.             if (d >= cc) {
  6303.                 return WebPEncodingSetError(b, VP8_ENC_ERROR_PARTITION_OVERFLOW)
  6304.             }
  6305.             c[3 * p + 0] = (d >> 0) & 0xff;
  6306.             c[3 * p + 1] = (d >> 8) & 0xff;
  6307.             c[3 * p + 2] = (d >> 16) & 0xff
  6308.         }
  6309.         return p ? b.writer(c, 3 * p, b) : 1
  6310.     }
  6311.     var cd = 8;
  6312.  
  6313.     function PutLE24(a, b, c) {
  6314.         a[b + 0] = (c >> 0) & 0xff;
  6315.         a[b + 1] = (c >> 8) & 0xff;
  6316.         a[b + 2] = (c >> 16) & 0xff
  6317.     }
  6318.     function WriteExtensions(a) {
  6319.         var b = Arr(cd, uint8_t);
  6320.         var c = a.bw_;
  6321.         var d = a.pic_;
  6322.         PutLE24(b, +0, a.layer_data_size_);
  6323.         b[3] = a.pic_.colorspace & WEBP_CSP_UV_MASK;
  6324.         if (a.layer_data_size_ > 0) {
  6325.             assert(a.use_layer_);
  6326.             if (!VP8BitWriterAppend(a.parts_[a.num_parts_ - 1], a.layer_data_, a.layer_data_off, a.layer_data_size_)) {
  6327.                 return WebPEncodingSetError(d, VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY)
  6328.             }
  6329.         }
  6330.         PutLE24(b, +4, a.alpha_data_size_);
  6331.         if (a.alpha_data_size_ > 0) {
  6332.             assert(a.has_alpha_);
  6333.             if (!VP8BitWriterAppend(c, a.alpha_data_, a.alpha_data_off, a.alpha_data_size_)) {
  6334.                 return WebPEncodingSetError(d, VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY)
  6335.             }
  6336.         }
  6337.         b[cd - 1] = 0x01;
  6338.         if (!VP8BitWriterAppend(c, b, 0, cd)) {
  6339.             return WebPEncodingSetError(d, VP8_ENC_ERROR_BITSTREAM_OUT_OF_MEMORY)
  6340.         }
  6341.         return 1
  6342.     }
  6343.     function GeneratePartition0(a) {
  6344.         var b = a.bw_;
  6345.         var c = a.mb_w_ * a.mb_h_;
  6346.         var d = uint64_t,
  6347.             pos2 = uint64_t,
  6348.             pos3 = uint64_t;
  6349.         var e = a.has_alpha_ || a.use_layer_;
  6350.         d = VP8BitWriterPos(b);
  6351.         VP8BitWriterInit(b, parseInt(c * 7 / 8));
  6352.         VP8PutBitUniform(b, e);
  6353.         VP8PutBitUniform(b, 0);
  6354.         PutSegmentHeader(b, a);
  6355.         PutFilterHeader(b, a.filter_hdr_);
  6356.         VP8PutValue(b, a.config_.partitions, 2);
  6357.         PutQuant(b, a);
  6358.         VP8PutBitUniform(b, 0);
  6359.         VP8WriteProbas(b, a.proba_);
  6360.         pos2 = VP8BitWriterPos(b);
  6361.         VP8CodeIntraModes(a);
  6362.         VP8BitWriterFinish(b);
  6363.         if (e && !WriteExtensions(a)) {
  6364.             return 0
  6365.         }
  6366.         pos3 = VP8BitWriterPos(b);
  6367.         if (a.pic_.stats_nozero) {
  6368.             a.pic_.stats.header_bytes[0] = parseInt((pos2 - d + 7) >> 3);
  6369.             a.pic_.stats.header_bytes[1] = parseInt((pos3 - pos2 + 7) >> 3);
  6370.             a.pic_.stats.alpha_data_size = a.alpha_data_size_;
  6371.             a.pic_.stats.layer_data_size = a.layer_data_size_
  6372.         }
  6373.         return !b.error_
  6374.     }
  6375.     function VP8EncWrite(a) {
  6376.         var b = a.pic_;
  6377.         var c = a.bw_;
  6378.         var d = 0;
  6379.         var e = size_t,
  6380.             pad = size_t;
  6381.         var p;
  6382.         d = GeneratePartition0(a);
  6383.         e = bY + VP8BitWriterSize(c) + 3 * (a.num_parts_ - 1);
  6384.         for (p = 0; p < a.num_parts_; ++p) {
  6385.             e += VP8BitWriterSize(a.parts_[p])
  6386.         }
  6387.         pad = e & 1;
  6388.         e += pad; {
  6389.             var f = VP8BitWriterBuf(c);
  6390.             var g = VP8BitWriterSize(c);
  6391.             d = d && PutHeader(a.profile_, g, e, b) && b.writer(f, g, b) && EmitPartitionsSize(a, b);
  6392.             f = ''
  6393.         }
  6394.         for (p = 0; p < a.num_parts_; ++p) {
  6395.             var h = VP8BitWriterBuf(a.parts_[p]);
  6396.             var i = VP8BitWriterSize(a.parts_[p]);
  6397.             if (i) d = d && b.writer(h, i, b);
  6398.             h = ''
  6399.         }
  6400.         if (d && pad) {
  6401.             var j = new Array(0);
  6402.             d = b.writer(j, 1, b)
  6403.         }
  6404.         a.coded_size_ = e + bZ;
  6405.         return d
  6406.     }
  6407.     var ce = Arr(255 + 255 + 1, uint8_t);
  6408.     var cf = Arr(255 + 255 + 1, uint8_t);
  6409.     var cg = Arr(1020 + 1020 + 1, int8_t);
  6410.     var ci = Arr(112 + 112 + 1, int8_t);
  6411.     var cj = Arr(255 + 510 + 1, uint8_t);
  6412.     var ck = 0;
  6413.  
  6414.     function InitTables(a) {
  6415.         if (!ck) {
  6416.             var i;
  6417.             for (i = -255; i <= 255; ++i) {
  6418.                 ce[255 + i] = (i < 0) ? -i : i;
  6419.                 cf[255 + i] = ce[255 + i] >> 1
  6420.             }
  6421.             for (i = -1020; i <= 1020; ++i) {
  6422.                 cg[1020 + i] = (i < -128) ? -128 : (i > 127) ? 127 : i
  6423.             }
  6424.             for (i = -112; i <= 112; ++i) {
  6425.                 ci[112 + i] = (i < -16) ? -16 : (i > 15) ? 15 : i
  6426.             }
  6427.             for (i = -255; i <= 255 + 255; ++i) {
  6428.                 cj[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i
  6429.             }
  6430.             ck = 1
  6431.         }
  6432.     }
  6433.     function do_filter2(p, b, c) {
  6434.         var d = p[b - 2 * c],
  6435.             p0 = p[b - c],
  6436.             q0 = p[b + 0],
  6437.             q1 = p[b + c];
  6438.         var a = 3 * (q0 - p0) + cg[1020 + d - q1];
  6439.         var e = ci[112 + ((a + 4) >> 3)];
  6440.         var f = ci[112 + ((a + 3) >> 3)];
  6441.         p[b - c] = cj[255 + p0 + f];
  6442.         p[b + 0] = cj[255 + q0 - e]
  6443.     }
  6444.     function do_filter4(p, b, c) {
  6445.         var d = p[b - 2 * c],
  6446.             p0 = p[b - c],
  6447.             q0 = p[b + 0],
  6448.             q1 = p[b + c];
  6449.         var a = 3 * (q0 - p0);
  6450.         var e = ci[112 + ((a + 4) >> 3)];
  6451.         var f = ci[112 + ((a + 3) >> 3)];
  6452.         var g = (e + 1) >> 1;
  6453.         p[b - 2 * c] = cj[255 + d + g];
  6454.         p[b - c] = cj[255 + p0 + f];
  6455.         p[b + 0] = cj[255 + q0 - e];
  6456.         p[b + c] = cj[255 + q1 - g]
  6457.     }
  6458.     function hev(p, a, b, c) {
  6459.         var d = p[a - 2 * b],
  6460.             p0 = p[a - b],
  6461.             q0 = p[a + 0],
  6462.             q1 = p[a + b];
  6463.         return (ce[255 + d - p0] > c) || (ce[255 + q1 - q0] > c)
  6464.     }
  6465.     function needs_filter(p, a, b, c) {
  6466.         var d = p[a - 2 * b],
  6467.             p0 = p[a - b],
  6468.             q0 = p[a + 0],
  6469.             q1 = p[a + b];
  6470.         return (2 * ce[255 + p0 - q0] + cf[255 + d - q1]) <= c
  6471.     }
  6472.     function needs_filter2(p, a, b, t, c) {
  6473.         var d = p[a - 4 * b],
  6474.             p2 = p[a - 3 * b],
  6475.             p1 = p[a - 2 * b],
  6476.             p0 = p[a - b];
  6477.         var e = p[a + 0],
  6478.             q1 = p[a + b],
  6479.             q2 = p[a + 2 * b],
  6480.             q3 = p[a + 3 * b];
  6481.         if ((2 * ce[255 + p0 - e] + cf[255 + p1 - q1]) > t) return 0;
  6482.         return ce[255 + d - p2] <= c && ce[255 + p2 - p1] <= c && ce[255 + p1 - p0] <= c && ce[255 + q3 - q2] <= c && ce[255 + q2 - q1] <= c && ce[255 + q1 - e] <= c
  6483.     }
  6484.     function SimpleVFilter16(p, a, b, c) {
  6485.         var i;
  6486.         for (i = 0; i < 16; ++i) {
  6487.             if (needs_filter(p, a + i, b, c)) {
  6488.                 do_filter2(p, a + i, b)
  6489.             }
  6490.         }
  6491.     }
  6492.     function SimpleHFilter16(p, a, b, c) {
  6493.         var i;
  6494.         for (i = 0; i < 16; ++i) {
  6495.             if (needs_filter(p, a + i * b, 1, c)) {
  6496.                 do_filter2(p, a + i * b, 1)
  6497.             }
  6498.         }
  6499.     }
  6500.     function SimpleVFilter16i(p, a, b, c) {
  6501.         var k;
  6502.         for (k = 3; k > 0; --k) {
  6503.             a += 4 * b;
  6504.             SimpleVFilter16(p, a, b, c)
  6505.         }
  6506.     }
  6507.     function SimpleHFilter16i(p, a, b, c) {
  6508.         var k;
  6509.         for (k = 3; k > 0; --k) {
  6510.             a += 4;
  6511.             SimpleHFilter16(p, a, b, c)
  6512.         }
  6513.     }
  6514.     function FilterLoop24(p, a, b, c, d, e, f, g) {
  6515.         while (d-- > 0) {
  6516.             if (needs_filter2(p, a, b, e, f)) {
  6517.                 if (hev(p, a, b, g)) {
  6518.                     do_filter2(p, a, b)
  6519.                 } else {
  6520.                     do_filter4(p, a, b)
  6521.                 }
  6522.             }
  6523.             a += c
  6524.         }
  6525.     }
  6526.     function VFilter16i(p, a, b, c, d, e) {
  6527.         var k;
  6528.         for (k = 3; k > 0; --k) {
  6529.             a += 4 * b;
  6530.             FilterLoop24(p, a, b, 1, 16, c, d, e)
  6531.         }
  6532.     }
  6533.     function HFilter16i(p, a, b, c, d, e) {
  6534.         var k;
  6535.         for (k = 3; k > 0; --k) {
  6536.             a += 4;
  6537.             FilterLoop24(p, a, 1, b, 16, c, d, e)
  6538.         }
  6539.     }
  6540.     function VFilter8i(u, a, v, b, c, d, e, f) {
  6541.         FilterLoop24(u, a + 4 * c, c, 1, 8, d, e, f);
  6542.         FilterLoop24(v, b + 4 * c, c, 1, 8, d, e, f)
  6543.     }
  6544.     function HFilter8i(u, a, v, b, c, d, e, f) {
  6545.         FilterLoop24(u, a + 4, 1, c, 8, d, e, f);
  6546.         FilterLoop24(v, b + 4, 1, c, 8, d, e, f)
  6547.     }
  6548.     function VP8EncVFilter16i(p, a, b, c, d, e) {
  6549.         VFilter16i(p, a, b, c, d, e)
  6550.     };
  6551.  
  6552.     function VP8EncHFilter16i(p, a, b, c, d, e) {
  6553.         HFilter16i(p, a, b, c, d, e)
  6554.     };
  6555.  
  6556.     function VP8EncVFilter8i(u, a, v, b, c, d, e, f) {
  6557.         VFilter8i(u, a, v, b, c, d, e, f)
  6558.     };
  6559.  
  6560.     function VP8EncHFilter8i(u, a, v, b, c, d, e, f) {
  6561.         HFilter8i(u, a, v, b, c, d, e, f)
  6562.     };
  6563.  
  6564.     function VP8EncSimpleVFilter16i(p, a, b, c) {
  6565.         SimpleVFilter16i(p, a, b, c)
  6566.     };
  6567.  
  6568.     function VP8EncSimpleHFilter16i(p, a, b, c) {
  6569.         SimpleHFilter16i(p, a, b, c)
  6570.     };
  6571.  
  6572.     function GetILevel(a, b) {
  6573.         if (a > 0) {
  6574.             if (a > 4) {
  6575.                 b >>= 2
  6576.             } else {
  6577.                 b >>= 1
  6578.             }
  6579.             if (b > 9 - a) {
  6580.                 b = 9 - a
  6581.             }
  6582.         }
  6583.         if (b < 1) b = 1;
  6584.         return b
  6585.     }
  6586.     function DoFilter(a, b) {
  6587.         var c = a.enc_;
  6588.         var d = GetILevel(c.config_.filter_sharpness, b);
  6589.         var e = 2 * b + d;
  6590.         var f = a.yuv_out2_;
  6591.         var g = a.yuv_out2_off + bk;
  6592.         var h = a.yuv_out2_;
  6593.         var i = a.yuv_out2_off + bl;
  6594.         var j = a.yuv_out2_;
  6595.         var k = a.yuv_out2_off + bm;
  6596.         memcpy(f, g, a.yuv_out_, a.yuv_out_off, bi * sizeof(uint8_t));
  6597.         if (c.filter_hdr_.simple_ == 1) {
  6598.             VP8EncSimpleHFilter16i(f, g, bf, e);
  6599.             VP8EncSimpleVFilter16i(f, g, bf, e)
  6600.         } else {
  6601.             var l = (b >= 40) ? 2 : (b >= 15) ? 1 : 0;
  6602.             VP8EncHFilter16i(f, g, bf, e, d, l);
  6603.             VP8EncHFilter8i(h, i, j, k, bf, e, d, l);
  6604.             VP8EncVFilter16i(f, g, bf, e, d, l);
  6605.             VP8EncVFilter8i(h, i, j, k, bf, e, d, l)
  6606.         }
  6607.     }
  6608.     var cl = 3;
  6609.     var cm = {
  6610.         w: double,
  6611.         xm: double,
  6612.         ym: double,
  6613.         xxm: double,
  6614.         xym: double,
  6615.         yym: double
  6616.     };
  6617.  
  6618.     function Accumulate(a, b, c, d, e, f, g, h, W, H, i) {
  6619.         var j = (h - cl < 0) ? 0 : h - cl;
  6620.         var k = (h + cl > H - 1) ? H - 1 : h + cl;
  6621.         var l = (g - cl < 0) ? 0 : g - cl;
  6622.         var m = (g + cl > W - 1) ? W - 1 : g + cl;
  6623.         var x, y;
  6624.         b += j * c;
  6625.         e += j * f;
  6626.         for (y = j; y <= k; ++y, b += c, e += f) {
  6627.             for (x = l; x <= m; ++x) {
  6628.                 var n = a[b + x];
  6629.                 var o = d[e + x];
  6630.                 i.w += 1;
  6631.                 i.xm += n;
  6632.                 i.ym += o;
  6633.                 i.xxm += n * n;
  6634.                 i.xym += n * o;
  6635.                 i.yym += o * o
  6636.             }
  6637.         }
  6638.     }
  6639.     function GetSSIM(a) {
  6640.         var b = a.xm * a.xm;
  6641.         var c = a.ym * a.ym;
  6642.         var d = a.xm * a.ym;
  6643.         var e = a.w * a.w;
  6644.         var f = a.xxm * a.w - b;
  6645.         var g = a.yym * a.w - c;
  6646.         var h = a.xym * a.w - d;
  6647.         var i = double,
  6648.             C2 = double;
  6649.         var j = double;
  6650.         var k = double;
  6651.         if (f < 0.) f = 0.;
  6652.         if (g < 0.) g = 0.;
  6653.         i = 6.5025 * e;
  6654.         C2 = 58.5225 * e;
  6655.         j = (2 * d + i) * (2 * h + C2);
  6656.         k = (b + c + i) * (f + g + C2);
  6657.         return (k != 0) ? j / k : 0.
  6658.     }
  6659.     function GetMBSSIM(a, b, c, d) {
  6660.         var x, y;
  6661.         var s = {
  6662.             w: double,
  6663.             xm: double,
  6664.             ym: double,
  6665.             xxm: double,
  6666.             xym: double,
  6667.             yym: double
  6668.         };
  6669.         for (x = 3; x < 13; x++) {
  6670.             for (y = 3; y < 13; y++) {
  6671.                 Accumulate(a, b + bk, bf, c, d + bk, bf, x, y, 16, 16, s)
  6672.             }
  6673.         }
  6674.         for (x = 1; x < 7; x++) {
  6675.             for (y = 1; y < 7; y++) {
  6676.                 Accumulate(a, b + bl, bf, c, d + bl, bf, x, y, 8, 8, s);
  6677.                 Accumulate(a, b + bm, bf, c, d + bm, bf, x, y, 8, 8, s)
  6678.             }
  6679.         }
  6680.         return GetSSIM(s)
  6681.     }
  6682.     function VP8InitFilter(a) {
  6683.         var s, i;
  6684.         if (!a.lf_stats_) return;
  6685.         InitTables();
  6686.         for (s = 0; s < be; s++) {
  6687.             for (i = 0; i < MAX_LF_LEVELS; i++) {
  6688.                 a.lf_stats_[s][i] = 0
  6689.             }
  6690.         }
  6691.     }
  6692.     function VP8StoreFilterStats(a) {
  6693.         var d = int;
  6694.         var s = a.mb_[a.mb_off].segment_;
  6695.         var b = a.enc_.dqm_[s].fstrength_;
  6696.         var c = -a.enc_.dqm_[s].quant_;
  6697.         var e = a.enc_.dqm_[s].quant_;
  6698.         var f = (e - c >= 4) ? 4 : 1;
  6699.         if (!a.lf_stats_) return;
  6700.         if (a.mb_[a.mb_off].type_ == 1 && a.mb_[a.mb_off].skip_) return;
  6701.         a.lf_stats_[s][0] += GetMBSSIM(a.yuv_in_, a.yuv_in_off, a.yuv_out_, a.yuv_out_off);
  6702.         for (d = c; d <= e; d += f) {
  6703.             var g = b + d;
  6704.             if (g <= 0 || g >= MAX_LF_LEVELS) {
  6705.                 continue
  6706.             }
  6707.             DoFilter(a, g);
  6708.             a.lf_stats_[s][g] += GetMBSSIM(a.yuv_in_, a.yuv_in_off, a.yuv_out2_, a.yuv_out2_off)
  6709.         }
  6710.     }
  6711.     function VP8AdjustFilterStrength(a) {
  6712.         var s;
  6713.         var b = a.enc_;
  6714.         if (!a.lf_stats_) {
  6715.             return
  6716.         }
  6717.         for (s = 0; s < be; s++) {
  6718.             var i, best_level = 0;
  6719.             var c = 1.00001 * a.lf_stats_[s][0];
  6720.             for (i = 1; i < MAX_LF_LEVELS; i++) {
  6721.                 var v = a.lf_stats_[s][i];
  6722.                 if (v > c) {
  6723.                     c = v;
  6724.                     best_level = i
  6725.                 }
  6726.             }
  6727.             b.dqm_[s].fstrength_ = best_level
  6728.         }
  6729.     }
  6730.     function BitWriterResize(a, b) {
  6731.         var c = uint8_t;
  6732.         var d = 0;
  6733.         var e = size_t;
  6734.         var f = a.pos_ + b;
  6735.         if (f <= a.max_pos_) return 1;
  6736.         e = 2 * a.max_pos_;
  6737.         if (e < f) e = f;
  6738.         if (e < 1024) e = 1024;
  6739.         c = malloc(e, uint8_t);
  6740.         if (c == null) {
  6741.             a.error_ = 1;
  6742.             return 0
  6743.         }
  6744.         if (a.pos_ > 0) memcpy(c, d, a.buf_, a.buf_off, a.pos_);
  6745.         a.buf_ = ''''
  6746.     }
  6747.     function GetProba(a, b) {
  6748.         var c = int;
  6749.         var d = a + b;
  6750.         if (d == 0) return 255;
  6751.         c = parseInt((255 * a + d / 2) / d);
  6752.         return c
  6753.     }
  6754.     function SetSegmentProbas(a) {
  6755.         var p = Arr(be, 0);
  6756.         var n = int;
  6757.         for (n = 0; n < a.mb_w_ * a.mb_h_; ++n) {
  6758.             var b = a.mb_info_[n];
  6759.             p[b.segment_]++
  6760.         }
  6761.         if (a.pic_.stats_nozero) {
  6762.             for (n = 0; n < be; ++n) {
  6763.                 a.pic_.stats.segment_size[n] = p[n]
  6764.             }
  6765.         }
  6766.         if (a.segment_hdr_.num_segments_ > 1) {
  6767.             var c = a.proba_.segments_;
  6768.             c[0] = GetProba(p[0] + p[1], p[2] + p[3]);
  6769.             c[1] = GetProba(p[0], p[1]);
  6770.             c[2] = GetProba(p[2], p[3]);
  6771.             a.segment_hdr_.update_map_ = (c[0] != 255) || (c[1] != 255) || (c[2] != 255) + 0;
  6772.             a.segment_hdr_.size_ = p[0] * (VP8BitCost(0, c[0]) + VP8BitCost(0, c[1])) + p[1] * (VP8BitCost(0, c[0]) + VP8BitCost(1, c[1])) + p[2] * (VP8BitCost(1, c[0]) + VP8BitCost(0, c[2])) + p[3] * (VP8BitCost(1, c[0]) + VP8BitCost(1, c[2]))
  6773.         } else {
  6774.             a.segment_hdr_.update_map_ = 0;
  6775.             a.segment_hdr_.size_ = 0
  6776.         }
  6777.     }
  6778.     function clip(v, m, M) {
  6779.         return v < m ? m : v > M ? M : v
  6780.     }
  6781.     function SetSegmentAlphas(a, b, c) {
  6782.         var d = a.segment_hdr_.num_segments_;
  6783.         var e = b[0],
  6784.             maxx = b[0];
  6785.         var n = int;
  6786.         if (d > 1) {
  6787.             for (n = 0; n < d; ++n) {
  6788.                 if (e > b[n]) e = b[n];
  6789.                 if (maxx < b[n]) maxx = b[n]
  6790.             }
  6791.         }
  6792.         if (maxx == e) maxx = e + 1;
  6793.         assert(c <= maxx && c >= e);
  6794.         for (n = 0; n < d; ++n) {
  6795.             var f = parseInt(255 * (b[n] - c) / (maxx - e));
  6796.             var g = parseInt(255 * (b[n] - e) / (maxx - e));
  6797.             a.dqm_[n].alpha_ = clip(f, -127, 127);
  6798.             a.dqm_[n].beta_ = clip(g, 0, 255)
  6799.         }
  6800.     }
  6801.     function AssignSegments(b, c) {
  6802.         var d = b.segment_hdr_.num_segments_;
  6803.         var e = Arr(be, int);
  6804.         var f = int;
  6805.         var g = Arr(256, int);
  6806.         var a, n, k;
  6807.         var h = 0,
  6808.             max_a = 255,
  6809.             range_a = int;
  6810.         var i = Arr(be, int),
  6811.             dist_accum = Arr(be, int);
  6812.         for (n = 0; n < 256 && c[n] == 0; ++n) {}
  6813.         h = n;
  6814.         for (n = 255; n > h && c[n] == 0; --n) {}
  6815.         max_a = n;
  6816.         range_a = max_a - h;
  6817.         for (n = 1, k = 0; n < 2 * d; n += 2) {
  6818.             e[k++] = parseInt(h + (n * range_a) / (2 * d))
  6819.         }
  6820.         for (k = 0; k < cJ; ++k) {
  6821.             var j = int;
  6822.             var l = int;
  6823.             for (n = 0; n < d; ++n) {
  6824.                 i[n] = 0;
  6825.                 dist_accum[n] = 0
  6826.             }
  6827.             var n = 0;
  6828.             for (a = h; a <= max_a; ++a) {
  6829.                 if (c[a]) {
  6830.                     while (n < d - 1 && Math.abs(a - e[n + 1]) < Math.abs(a - e[n])) {
  6831.                         n++
  6832.                     }
  6833.                     g[a] = n;
  6834.                     dist_accum[n] += a * c[a];
  6835.                     i[n] += c[a]
  6836.                 }
  6837.             }
  6838.             l = 0;
  6839.             f = 0;
  6840.             j = 0;
  6841.             for (n = 0; n < d; ++n) {
  6842.                 if (i[n]) {
  6843.                     var m = parseInt((dist_accum[n] + i[n] / 2) / i[n]);
  6844.                     l += Math.abs(e[n] - m);
  6845.                     e[n] = m;
  6846.                     f += m * i[n];
  6847.                     j += i[n]
  6848.                 }
  6849.             }
  6850.             f = parseInt((f + j / 2) / j);
  6851.             if (l < 5) break
  6852.         }
  6853.         for (n = 0; n < b.mb_w_ * b.mb_h_; ++n) {
  6854.             var o = b.mb_info_[n];
  6855.             var a = o.alpha_;
  6856.             o.segment_ = g[a];
  6857.             o.alpha_ = e[g[a]]
  6858.         }
  6859.         if (d > 1) {
  6860.             var p = (b.config_.preprocessing & 1);
  6861.             if (p) SmoothSegmentMap(b)
  6862.         }
  6863.         SetSegmentProbas(b);
  6864.         SetSegmentAlphas(b, e, f)
  6865.     }
  6866.     var cK = 2;
  6867.     var cL = 2;
  6868.     var cM = 2;
  6869.  
  6870.     function MBAnalyzeBestIntra16Mode(a) {
  6871.         var b = (a.enc_.method_ >= 3) ? cK : 4;
  6872.         var c;
  6873.         var d = -1;
  6874.         var e = 0;
  6875.         VP8MakeLuma16Preds(a);
  6876.         for (c = 0; c < b; ++c) {
  6877.             var f = dE(a.yuv_in_, a.yuv_in_off + bk, a.yuv_p_, a.yuv_p_off + df[c], 0, 16);
  6878.             if (f > d) {
  6879.                 d = f;
  6880.                 e = c
  6881.             }
  6882.         }
  6883.         VP8SetIntra16Mode(a, e);
  6884.         return d
  6885.     }
  6886.     function MBAnalyzeBestIntra4Mode(a, b) {
  6887.         var c = Arr(16, int);
  6888.         var d = (a.enc_.method_ >= 3) ? cL : NUM_BMODES;
  6889.         var e = 0;
  6890.         VP8IteratorStartI4(a);
  6891.         do {
  6892.             var f;
  6893.             var g = -1;
  6894.             var h = a.yuv_in_;
  6895.             var i = a.yuv_in_off + bk + di[a.i4_];
  6896.             VP8MakeIntra4Preds(a);
  6897.             for (f = 0; f < d; ++f) {
  6898.                 var j = dE(h, i, a.yuv_p_, a.yuv_p_off + dh[f], 0, 1);
  6899.                 if (j > g) {
  6900.                     g = j;
  6901.                     c[a.i4_] = f
  6902.                 }
  6903.             }
  6904.             e += g
  6905.         } while (VP8IteratorRotateI4(a, a.yuv_in_, a.yuv_in_off + bk));
  6906.         if (e > b) {
  6907.             VP8SetIntra4Mode(a, c);
  6908.             b = ClipAlpha(e)
  6909.         }
  6910.         return b
  6911.     }
  6912.     function MBAnalyzeBestUVMode(a) {
  6913.         var b = -1;
  6914.         var c = 0;
  6915.         var d = (a.enc_.method_ >= 3) ? cM : 4;
  6916.         var e;
  6917.         VP8MakeChroma8Preds(a);
  6918.         for (e = 0; e < d; ++e) {
  6919.             var f = dE(a.yuv_in_, a.yuv_in_off + bl, a.yuv_p_, a.yuv_p_off + dg[e], 16, 16 + 4 + 4);
  6920.             if (f > b) {
  6921.                 b = f;
  6922.                 c = e
  6923.             }
  6924.         }
  6925.         VP8SetIntraUVMode(a, c);
  6926.         return b
  6927.     }
  6928.     function MBAnalyze(a, b, c) {
  6929.         var d = a.enc_;
  6930.         var e, best_uv_alpha = int;
  6931.         VP8SetIntra16Mode(a, 0);
  6932.         VP8SetSkip(a, 0);
  6933.         VP8SetSegment(a, 0);
  6934.         e = MBAnalyzeBestIntra16Mode(a);
  6935.         if (d.method_ != 3) {
  6936.             e = MBAnalyzeBestIntra4Mode(a, e)
  6937.         }
  6938.         best_uv_alpha = MBAnalyzeBestUVMode(a);
  6939.         e = parseInt((e + best_uv_alpha + 1) / 2);
  6940.         b[e]++;
  6941.         c += best_uv_alpha;
  6942.         a.mb_[a.mb_off].alpha_ = e;
  6943.         return c
  6944.     }
  6945.     function VP8EncAnalyze(a) {
  6946.         var b = Arr(256, 0);
  6947.         var c = newObjectIt(bV);
  6948.         VP8IteratorInit(a, c);
  6949.         a.uv_alpha_ = 0;
  6950.         do {
  6951.             VP8IteratorImport(c);
  6952.             a.uv_alpha_ = MBAnalyze(c, b, a.uv_alpha_)
  6953.         } while (VP8IteratorNext(c, c.yuv_in_, c.yuv_in_off));
  6954.         a.uv_alpha_ /= a.mb_w_ * a.mb_h_;
  6955.         a.uv_alpha_ = parseInt(a.uv_alpha_);
  6956.         AssignSegments(a, b);
  6957.         return 1
  6958.     }
  6959.     var cN = 1;
  6960.     var cO = 1;
  6961.     var cP = 0;
  6962.     var cQ = 1;
  6963.     var cR = 64;
  6964.     var cS = 30;
  6965.     var cT = 100;
  6966.     var cU = 0.9;
  6967.  
  6968.     function MULT_8B(a, b) {
  6969.         return (((a) * (b) + 128) >> 8)
  6970.     }
  6971.     function clip(v, m, M) {
  6972.         return v < m ? m : v > M ? M : v
  6973.     }
  6974.     var cV = new Array(0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15);
  6975.     var cW = new Array(4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157);
  6976.     var cX = new Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284);
  6977.     var cY = new Array(8, 8, 9, 10, 12, 13, 15, 17, 18, 20, 21, 23, 24, 26, 27, 29, 31, 32, 34, 35, 37, 38, 40, 41, 43, 44, 46, 48, 49, 51, 52, 54, 55, 57, 58, 60, 62, 63, 65, 66, 68, 69, 71, 72, 74, 75, 77, 79, 80, 82, 83, 85, 86, 88, 89, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 124, 127, 130, 133, 136, 139, 142, 145, 148, 151, 155, 158, 161, 164, 167, 170, 173, 176, 179, 184, 189, 193, 198, 203, 207, 212, 217, 221, 226, 230, 235, 240, 244, 249, 254, 258, 263, 268, 274, 280, 286, 292, 299, 305, 311, 317, 323, 330, 336, 342, 348, 354, 362, 370, 379, 385, 393, 401, 409, 416, 424, 432, 440);
  6978.     var cZ = new Array(0, 10, 20, 30, 10, 20, 30, 30, 20, 30, 30, 30, 30, 30, 30, 30);
  6979.     var da = new Array(new Array(96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96), new Array(96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96), new Array(96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96));
  6980.     var db = new Array(0, 30, 60, 90, 30, 60, 90, 90, 60, 90, 90, 90, 90, 90, 90, 90);
  6981.  
  6982.     function ExpandMatrix(m, a) {
  6983.         var i;
  6984.         var b = 0;
  6985.         for (i = 2; i < 16; ++i) {
  6986.             m.q_[i] = m.q_[1]
  6987.         }
  6988.         for (i = 0; i < 16; ++i) {
  6989.             var j = cV[i];
  6990.             var c = da[a][j];
  6991.             m.iq_[j] = parseInt((1 << bI) / m.q_[j]);
  6992.             m.bias_[j] = BIAS(c);
  6993.             m.zthresh_[j] = ((256 - c) * m.q_[j] + 127) >> 8;
  6994.             m.sharpen_[j] = (db[j] * m.q_[j]) >> 11;
  6995.             b += m.q_[j]
  6996.         }
  6997.         return (b + 8) >> 4
  6998.     }
  6999.     function SetupMatrices(a) {
  7000.         var i;
  7001.         var b = (a.method_ >= 4) ? a.config_.sns_strength : 0;
  7002.         var c = a.segment_hdr_.num_segments_;
  7003.         for (i = 0; i < c; ++i) {
  7004.             var m = a.dqm_[i];
  7005.             var q = m.quant_;
  7006.             var d = int,
  7007.                 q16 = int,
  7008.                 quv = int;
  7009.             m.y1_.q_[0] = cW[clip(q + a.dq_y1_dc_, 0, 127)];
  7010.             m.y1_.q_[1] = cX[clip(q, 0, 127)];
  7011.             m.y2_.q_[0] = cW[clip(q + a.dq_y2_dc_, 0, 127)] * 2;
  7012.             m.y2_.q_[1] = cY[clip(q + a.dq_y2_ac_, 0, 127)];
  7013.             m.uv_.q_[0] = cW[clip(q + a.dq_uv_dc_, 0, 117)];
  7014.             m.uv_.q_[1] = cX[clip(q + a.dq_uv_ac_, 0, 127)];
  7015.             d = ExpandMatrix(m.y1_, 0);
  7016.             q16 = ExpandMatrix(m.y2_, 1);
  7017.             quv = ExpandMatrix(m.uv_, 2); {
  7018.                 m.lambda_i4_ = (3 * d * d) >> 7;
  7019.                 m.lambda_i16_ = (3 * q16 * q16);
  7020.                 m.lambda_uv_ = (3 * quv * quv) >> 6;
  7021.                 m.lambda_mode_ = (1 * d * d) >> 7;
  7022.                 m.lambda_trellis_i4_ = (7 * d * d) >> 3;
  7023.                 m.lambda_trellis_i16_ = (q16 * q16) >> 2;
  7024.                 m.lambda_trellis_uv_ = (quv * quv) << 1;
  7025.                 m.tlambda_ = (b * d) >> 5
  7026.             }
  7027.         }
  7028.     }
  7029.     var dc = 3;
  7030.  
  7031.     function SetupFilterStrength(a) {
  7032.         var i;
  7033.         var b = a.config_.filter_strength;
  7034.         for (i = 0; i < be; ++i) {
  7035.             var c = parseInt(b * 256 * a.dqm_[i].quant_ / 128);
  7036.             var f = parseInt(c / (256 + a.dqm_[i].beta_));
  7037.             a.dqm_[i].fstrength_ = (f < dc) ? 0 : (f > 63) ? 63 : f
  7038.         }
  7039.         a.filter_hdr_.level_ = a.dqm_[0].fstrength_;
  7040.         a.filter_hdr_.simple_ = (a.config_.filter_type == 0) + 0;
  7041.         a.filter_hdr_.sharpness_ = a.config_.filter_sharpness
  7042.     }
  7043.     var dd = (6);
  7044.     var de = (-4);
  7045.  
  7046.     function QualityToCompression(q) {
  7047.         var c = q / 100.;
  7048.         return (c < 0.75) ? c * (2. / 3.) : 2. * c - 1.
  7049.     }
  7050.     function VP8SetSegmentParams(a, b) {
  7051.         var i;
  7052.         var d, dq_uv_dc = int;
  7053.         var e = a.config_.segments;
  7054.         var f = cU * a.config_.sns_strength / 100. / 128.;
  7055.         var g = QualityToCompression(b);
  7056.         for (i = 0; i < e; ++i) {
  7057.             var h = (1. - f * a.dqm_[i].alpha_) / 3.;
  7058.             var c = Math.pow(g, h);
  7059.             var q = parseInt((127. * (1. - c)));
  7060.             assert(h > 0.);
  7061.             a.dqm_[i].quant_ = clip(q, 0, 127)
  7062.         }
  7063.         a.base_quant_ = a.dqm_[0].quant_;
  7064.         for (i = e; i < be; ++i) {
  7065.             a.dqm_[i].quant_ = a.base_quant_
  7066.         }
  7067.         d = parseInt((a.uv_alpha_ - cR) * (dd - de) / (cT - cS));
  7068.         d = parseInt(d * a.config_.sns_strength / 100);
  7069.         d = clip(d, de, dd);
  7070.         dq_uv_dc = parseInt(-4 * a.config_.sns_strength / 100);
  7071.         dq_uv_dc = clip(dq_uv_dc, -15, 15);
  7072.         a.dq_y1_dc_ = 0;
  7073.         a.dq_y2_dc_ = 0;
  7074.         a.dq_y2_ac_ = 0;
  7075.         a.dq_uv_dc_ = dq_uv_dc;
  7076.         a.dq_uv_ac_ = d;
  7077.         SetupMatrices(a);
  7078.         SetupFilterStrength(a)
  7079.     }
  7080.     var df = new Array(bo, bp, bq, br);
  7081.     var dg = new Array(bs, bt, bu, bv);
  7082.     var dh = new Array(bw, bx, by, bz, bA, bB, bC, bD, bE, bF);
  7083.  
  7084.     function VP8MakeLuma16Preds(a) {
  7085.         var b = a.enc_;
  7086.         var c = a.x_ ? b.y_left_ : null;
  7087.         var d = a.x_ ? b.y_left_off : null;
  7088.         var e = a.y_ ? b.y_top_ : null;
  7089.         var f = a.y_ ? b.y_top_off + a.x_ * 16 : null;
  7090.         dK(a.yuv_p_, a.yuv_p_off, c, d, e, f)
  7091.     }
  7092.     function VP8MakeChroma8Preds(a) {
  7093.         var b = a.enc_;
  7094.         var c = a.x_ ? b.u_left_ : null;
  7095.         var d = a.x_ ? b.u_left_off : null;
  7096.         var e = a.y_ ? b.uv_top_ : null;
  7097.         var f = a.y_ ? b.uv_top_off + a.x_ * 16 : null;
  7098.         dL(a.yuv_p_, a.yuv_p_off, c, d, e, f)
  7099.     }
  7100.     function VP8MakeIntra4Preds(a) {
  7101.         dJ(a.yuv_p_, a.yuv_p_off, a.i4_top_, a.i4_top_off)
  7102.     }
  7103.     var di = new Array(0 + 0 * bf, 4 + 0 * bf, 8 + 0 * bf, 12 + 0 * bf, 0 + 4 * bf, 4 + 4 * bf, 8 + 4 * bf, 12 + 4 * bf, 0 + 8 * bf, 4 + 8 * bf, 8 + 8 * bf, 12 + 8 * bf, 0 + 12 * bf, 4 + 12 * bf, 8 + 12 * bf, 12 + 12 * bf, 0 + 0 * bf, 4 + 0 * bf, 0 + 4 * bf, 4 + 4 * bf, 8 + 0 * bf, 12 + 0 * bf, 8 + 4 * bf, 12 + 4 * bf);
  7104.     var dj = new Array(38, 32, 20, 9, 32, 28, 17, 7, 20, 17, 10, 4, 9, 7, 4, 2);
  7105.     var dk = new Array(30, 27, 19, 11, 27, 24, 17, 10, 19, 17, 12, 8, 11, 10, 8, 6);
  7106.  
  7107.     function InitScore(a) {
  7108.         a.D = 0;
  7109.         a.SD = 0;
  7110.         a.R = 0;
  7111.         a.nz = 0;
  7112.         a.score = bH
  7113.     }
  7114.     function CopyScore(a, b) {
  7115.         a.D = (b.D);
  7116.         a.SD = (b.SD);
  7117.         a.R = (b.R);
  7118.         a.nz = (b.nz);
  7119.         a.score = (b.score)
  7120.     }
  7121.     function AddScore(a, b) {
  7122.         a.D += b.D;
  7123.         a.SD += b.SD;
  7124.         a.R += b.R;
  7125.         a.nz |= b.nz;
  7126.         a.score += b.score
  7127.     }
  7128.     var dl = {
  7129.         prev: int,
  7130.         level: int,
  7131.         sign: int,
  7132.         cost: score_t,
  7133.         error: score_t,
  7134.         ctx: int
  7135.     };
  7136.     var dm = 0;
  7137.     var dn = 1;
  7138.     var dp = (dm + 1 + dn);
  7139.  
  7140.     function SetRDScore(a, b) {
  7141.         b.score = b.R * a + 256 * (b.D + b.SD)
  7142.     }
  7143.     function RDScoreTrellis(a, b, c) {
  7144.         return b * a + 256 * c
  7145.     }
  7146.     function TrellisQuantizeBlock(a, b, c, d, e, f, g) {
  7147.         var h = a.enc_.proba_.coeffs_[e];
  7148.         var i = a.enc_.proba_.level_cost_[e];
  7149.         var k = (e == 0) ? 1 : 0;
  7150.         var l = ArrM(new Array(17, dp), dl);
  7151.         var o = new Array(-1, -1, -1);
  7152.         var q = score_t;
  7153.         var r;
  7154.         var s = k - 1;
  7155.         var n = int,
  7156.             m = int,
  7157.             p = int,
  7158.             nz = int; {
  7159.             var t = score_t;
  7160.             var u = score_t;
  7161.             var v = parseInt(f.q_[1] * f.q_[1] / 4);
  7162.             var w = h[cw[k]][d][0];
  7163.             u = 0;
  7164.             for (n = k; n < 16; ++n) {
  7165.                 var j = cV[n];
  7166.                 var x = b[j] * b[j];
  7167.                 u += dk[j] * x;
  7168.                 if (x > v) s = n
  7169.             }
  7170.             if (s < 15)++s;
  7171.             t = VP8BitCost(0, w);
  7172.             q = RDScoreTrellis(g, t, u);
  7173.             n = k - 1;
  7174.             for (m = -dm; m <= dn; ++m) {
  7175.                 l[n + 1][m + dm].cost = 0;
  7176.                 l[n + 1][m + dm].error = u;
  7177.                 l[n + 1][m + dm].ctx = d
  7178.             }
  7179.         }
  7180.         for (n = k; n <= s; ++n) {
  7181.             var j = cV[n];
  7182.             var Q = f.q_[j];
  7183.             var y = f.iq_[j];
  7184.             var B = BIAS(0x00);
  7185.             var z = (b[j] < 0) + 0;
  7186.             var A = (z ? -b[j] : b[j]) + f.sharpen_[j];
  7187.             var C;
  7188.             if (A > 2047) A = 2047;
  7189.             C = QUANTDIV(A, y, B);
  7190.             for (m = -dm; m <= dn; ++m) {
  7191.                 var D = l[n + 1][m + dm];
  7192.                 var E, new_error;
  7193.                 var F = bH;
  7194.                 var G = C + m;
  7195.                 var w;
  7196.                 D.sign = z;
  7197.                 D.level = G;
  7198.                 D.ctx = (G == 0) ? 0 : (G == 1) ? 1 : 2;
  7199.                 if (G >= 2048 || G < 0) {
  7200.                     D.cost = bH;
  7201.                     continue
  7202.                 }
  7203.                 w = h[cw[n + 1]][D.ctx][0];
  7204.                 new_error = A - G * Q;
  7205.                 E = dk[j] * (A * A - new_error * new_error);
  7206.                 for (p = -dm; p <= dn; ++p) {
  7207.                     var H = l[n - 1 + 1][p + dm];
  7208.                     var I = H.ctx;
  7209.                     var J = i[cw[n]][I];
  7210.                     var K = H.error - E;
  7211.                     var t = score_t,
  7212.                         base_cost = score_t,
  7213.                         score = score_t;
  7214.                     if (H.cost >= bH) {
  7215.                         continue
  7216.                     }
  7217.                     base_cost = H.cost + VP8LevelCost(J, G);
  7218.                     t = base_cost;
  7219.                     if (G && n < 15) {
  7220.                         t += VP8BitCost(1, w)
  7221.                     }
  7222.                     score = RDScoreTrellis(g, t, K);
  7223.                     if (score < F) {
  7224.                         F = score;
  7225.                         D.cost = t;
  7226.                         D.error = K;
  7227.                         D.prev = p
  7228.                     }
  7229.                     if (G) {
  7230.                         t = base_cost;
  7231.                         if (n < 15) t += VP8BitCost(0, w);
  7232.                         score = RDScoreTrellis(g, t, K);
  7233.                         if (score < q) {
  7234.                             q = score;
  7235.                             o[0] = n;
  7236.                             o[1] = m;
  7237.                             o[2] = p
  7238.                         }
  7239.                     }
  7240.                 }
  7241.             }
  7242.         }
  7243.         memset_(b, +k, 0, (16 - k) * sizeof(b));
  7244.         memset_(c, +k, 0, (16 - k) * sizeof(c));
  7245.         if (o[0] == -1) {
  7246.             return 0
  7247.         }
  7248.         n = o[0];
  7249.         r = o[1];
  7250.         l[n + 1][r + dm].prev = o[2];
  7251.         nz = 0;
  7252.         for (; n >= k; --n) {
  7253.             var L = l[n + 1][r + dm];
  7254.             var j = cV[n];
  7255.             c[n] = L.sign ? -L.level : L.level;
  7256.             nz |= (L.level != 0);
  7257.             b[j] = c[n] * f.q_[j];
  7258.             r = L.prev
  7259.         }
  7260.         return nz
  7261.     }
  7262.     function ReconstructIntra16(a, b, c, d, e) {
  7263.         var f = a.enc_;
  7264.         var g = a.yuv_p_;
  7265.         var h = a.yuv_p_off + df[e];
  7266.         var i = a.yuv_in_;
  7267.         var j = a.yuv_in_off + bk;
  7268.         var k = f.dqm_[a.mb_[a.mb_off].segment_];
  7269.         var l = 0;
  7270.         var n = int;
  7271.         var m = ArrM(Array(16, 16), int16_t),
  7272.             dc_tmp = Arr(16, int16_t);
  7273.         for (n = 0; n < 16; ++n) {
  7274.             dG(i, j + di[n], g, h + di[n], m[n])
  7275.         }
  7276.         dI(m, dc_tmp);
  7277.         l |= dS(dc_tmp, b.y_dc_levels, 0, k.y2_) << 24;
  7278.         if (cO && a.do_trellis_) {
  7279.             var x, y;
  7280.             VP8IteratorNzToBytes(a);
  7281.             for (y = 0, n = 0; y < 4; ++y) {
  7282.                 for (x = 0; x < 4; ++x) {
  7283.                     var o = a.top_nz_[x] + a.left_nz_[y];
  7284.                     var p = TrellisQuantizeBlock(a, m[n], b.y_ac_levels[n], o, 0, k.y1_, k.lambda_trellis_i16_);
  7285.                     a.top_nz_[x] = a.left_nz_[y] = p;
  7286.                     l |= p << n;
  7287.                     ++n
  7288.                 }
  7289.             }
  7290.         } else {
  7291.             for (n = 0; n < 16; ++n) {
  7292.                 l |= dS(m[n], b.y_ac_levels[n], 1, k.y1_) << n
  7293.             }
  7294.         }
  7295.         dH(dc_tmp, m);
  7296.         for (n = 0; n < 16; n += 2) {
  7297.             dF(g, h + di[n], m[n], 0, c, d + di[n], 1)
  7298.         }
  7299.         return l
  7300.     }
  7301.     function ReconstructIntra4(a, b, c, d, e, f, g) {
  7302.         var h = a.enc_;
  7303.         var i = a.yuv_p_;
  7304.         var j = a.yuv_p_off + dh[g];
  7305.         var k = h.dqm_[a.mb_[a.mb_off].segment_];
  7306.         var l = 0;
  7307.         var m = Arr(16, int16_t);
  7308.         dG(c, d, i, j, m);
  7309.         if (cN && a.do_trellis_) {
  7310.             var x = a.i4_ & 3,
  7311.                 y = a.i4_ >> 2;
  7312.             var n = a.top_nz_[x] + a.left_nz_[y];
  7313.             l = TrellisQuantizeBlock(a, m, b, n, 3, k.y1_, k.lambda_trellis_i4_)
  7314.         } else {
  7315.             l = dS(m, b, 0, k.y1_)
  7316.         }
  7317.         dF(i, j, m, 0, e, f, 0);
  7318.         return l
  7319.     }
  7320.     function ReconstructUV(a, b, c, d, e) {
  7321.         var f = a.enc_;
  7322.         var g = a.yuv_p_;
  7323.         var h = a.yuv_p_off + dg[e];
  7324.         var i = a.yuv_in_;
  7325.         var j = a.yuv_in_off + bl;
  7326.         var k = f.dqm_[a.mb_[a.mb_off].segment_];
  7327.         var l = 0;
  7328.         var n;
  7329.         var m = ArrM(new Array(8, 16), int16_t);
  7330.         for (n = 0; n < 8; ++n) {
  7331.             dG(i, j + di[16 + n], g, h + di[16 + n], m[n])
  7332.         }
  7333.         if (cP && a.do_trellis_) {
  7334.             var o, x, y;
  7335.             for (o = 0; o <= 2; o += 2) {
  7336.                 n = 0;
  7337.                 for (y = 0; y < 2; ++y) {
  7338.                     for (x = 0; x < 2; ++x) {
  7339.                         var p = a.top_nz_[4 + o + x] + a.left_nz_[4 + o + y];
  7340.                         var q = TrellisQuantizeBlock(a, m[n], b.uv_levels[n], p, 2, k.uv_, k.lambda_trellis_uv_);
  7341.                         a.top_nz_[4 + o + x] = a.left_nz_[4 + o + y] = q;
  7342.                         l |= q << n;
  7343.                         ++n
  7344.                     }
  7345.                 }
  7346.             }
  7347.         } else {
  7348.             for (n = 0; n < 8; ++n) {
  7349.                 l |= dS(m[n], b.uv_levels[n], 0, k.uv_) << n
  7350.             }
  7351.         }
  7352.         for (n = 0; n < 8; n += 1) {
  7353.             dF(g, h + di[16 + n], m[n], 0, c, d + di[16 + n], 0)
  7354.         }
  7355.         return (l << 16)
  7356.     }
  7357.     function SwapPtr(a, c, b, d) {}
  7358.     function SwapOut(a) {
  7359.         var b = (a.yuv_out_);
  7360.         var c = (a.yuv_out_off);
  7361.         a.yuv_out_ = (a.yuv_out2_);
  7362.         a.yuv_out_off = (a.yuv_out2_off);
  7363.         a.yuv_out2_ = (b);
  7364.         a.yuv_out2_off = (c)
  7365.     }
  7366.     var dq = newObjectIt(bU);
  7367.  
  7368.     function PickBestIntra16(a, b) {
  7369.         var c = a.enc_;
  7370.         var d = c.dqm_[a.mb_[a.mb_off].segment_];
  7371.         var e = d.lambda_i16_;
  7372.         var f = d.tlambda_;
  7373.         var g = a.yuv_in_;
  7374.         var h = a.yuv_in_off + bk;
  7375.         var i = (dq);
  7376.         var j;
  7377.         b.mode_i16 = -1;
  7378.         for (j = 0; j < 4; ++j) {
  7379.             var k = a.yuv_out2_;
  7380.             var l = a.yuv_out2_off + bk;
  7381.             var m = int;
  7382.             m = ReconstructIntra16(a, i, k, l, j);
  7383.             i.D = dM(g, h, k, l);
  7384.             i.SD = f ? MULT_8B(f, dR(g, h, k, l, dj)) : 0;
  7385.             i.R = VP8GetCostLuma16(a, i);
  7386.             i.R += ct[j];
  7387.             SetRDScore(e, i);
  7388.             if (j == 0 || i.score < b.score) {
  7389.                 CopyScore(b, i);
  7390.                 b.mode_i16 = j;
  7391.                 b.nz = m;
  7392.                 memcpyArrM(b.y_ac_levels, 0, i.y_ac_levels, 0, i.y_ac_levels.length);
  7393.                 memcpy(b.y_dc_levels, 0, i.y_dc_levels, 0, i.y_dc_levels.length);
  7394.                 SwapOut(a)
  7395.             }
  7396.         }
  7397.         SetRDScore(d.lambda_mode_, b);
  7398.         VP8SetIntra16Mode(a, b.mode_i16)
  7399.     }
  7400.     function GetCostModeI4(a, b) {
  7401.         var c = a.enc_.preds_w_;
  7402.         var x = (a.i4_ & 3),
  7403.             y = a.i4_ >> 2;
  7404.         var d = (x == 0) ? a.preds_[a.preds_off + y * c - 1] : b[a.i4_ - 1];
  7405.         var e = (y == 0) ? a.preds_[a.preds_off - c + x] : b[a.i4_ - 4];
  7406.         return cu[e][d]
  7407.     }
  7408.     var dr = newObjectIt(bU);
  7409.     var ds = newObjectIt(bU);
  7410.     var dt = newObjectIt(bU);
  7411.  
  7412.     function PickBestIntra4(a, b) {
  7413.         var c = a.enc_;
  7414.         var d = c.dqm_[a.mb_[a.mb_off].segment_];
  7415.         var e = d.lambda_i4_;
  7416.         var f = d.tlambda_;
  7417.         var g = a.yuv_in_;
  7418.         var h = a.yuv_in_off + bk;
  7419.         var i = a.yuv_out2_;
  7420.         var j = a.yuv_out2_off + bk;
  7421.         var k = 0;
  7422.         var l = (dr);
  7423.         if (c.max_i4_header_bits_ == 0) {
  7424.             return 0
  7425.         }
  7426.         InitScore(l);
  7427.         l.score = 211;
  7428.         VP8IteratorStartI4(a);
  7429.         do {
  7430.             var m = (ds);
  7431.             var n;
  7432.             var o = -1;
  7433.             var p = g;
  7434.             var q = h + di[a.i4_];
  7435.             var r = GetCostModeI4(a, b.modes_i4);
  7436.             var s = (i);
  7437.             var t = (j + di[a.i4_]);
  7438.             var u = (a.yuv_p_);
  7439.             var v = (a.yuv_p_off + bG);
  7440.             InitScore(m);
  7441.             VP8MakeIntra4Preds(a);
  7442.             for (n = 0; n < NUM_BMODES; ++n) {
  7443.                 var w = (dt);
  7444.                 var x = Arr(16, int16_t);
  7445.                 w.nz = ReconstructIntra4(a, x, p, q, u, v, n) << a.i4_;
  7446.                 w.D = dP(p, q, u, v);
  7447.                 w.SD = f ? MULT_8B(f, dQ(p, q, u, v, dj)) : 0;
  7448.                 w.R = VP8GetCostLuma4(a, x);
  7449.                 w.R += r[n];
  7450.                 SetRDScore(e, w);
  7451.                 if (o < 0 || w.score < m.score) {
  7452.                     CopyScore(m, w);
  7453.                     o = n;
  7454.                     var y = (u);
  7455.                     var z = (v);
  7456.                     u = (s);
  7457.                     v = (t);
  7458.                     s = (y);
  7459.                     t = (z);
  7460.                     memcpy(l.y_ac_levels[a.i4_], 0, x, 0, sizeof(x) * 16)
  7461.                 }
  7462.             }
  7463.             SetRDScore(d.lambda_mode_, m);
  7464.             AddScore(l, m);
  7465.             k += r[o];
  7466.             if (l.score >= b.score || k > c.max_i4_header_bits_) {
  7467.                 return 0
  7468.             }
  7469.             if (t != j + di[a.i4_]) dT(s, t, i, j + di[a.i4_]);
  7470.             b.modes_i4[a.i4_] = o;
  7471.             a.top_nz_[a.i4_ & 3] = a.left_nz_[a.i4_ >> 2] = (m.nz ? 1 : 0)
  7472.         } while (VP8IteratorRotateI4(a, i, j));
  7473.         CopyScore(b, l);
  7474.         VP8SetIntra4Mode(a, b.modes_i4);
  7475.         SwapOut(a);
  7476.         memcpyArrM(b.y_ac_levels, 0, l.y_ac_levels, 0, b.y_ac_levels.length);
  7477.         return 1
  7478.     }
  7479.     var du = newObjectIt(bU);
  7480.     var dv = newObjectIt(bU);
  7481.  
  7482.     function PickBestUV(a, b) {
  7483.         var c = a.enc_;
  7484.         var d = c.dqm_[a.mb_[a.mb_off].segment_];
  7485.         var e = d.lambda_uv_;
  7486.         var f = a.yuv_in_;
  7487.         var g = a.yuv_in_off + bl;
  7488.         var h = a.yuv_out2_;
  7489.         var i = a.yuv_out2_off + bl;
  7490.         var j = a.yuv_out_;
  7491.         var k = a.yuv_out_off + bl;
  7492.         var l = (du);
  7493.         var m;
  7494.         b.mode_uv = -1;
  7495.         InitScore(l);
  7496.         for (m = 0; m < 4; ++m) {
  7497.             var n = (dv);
  7498.             n.nz = ReconstructUV(a, n, h, i, m);
  7499.             n.D = dO(f, g, h, i);
  7500.             n.SD = 0;
  7501.             n.R = VP8GetCostUV(a, n);
  7502.             n.R += cs[m];
  7503.             SetRDScore(e, n);
  7504.             if (m == 0 || n.score < l.score) {
  7505.                 CopyScore(l, n);
  7506.                 b.mode_uv = m;
  7507.                 memcpyArrM(b.uv_levels, 0, n.uv_levels, 0, b.uv_levels.length);
  7508.                 memcpy(j, k, h, i, bh)
  7509.             }
  7510.         }
  7511.         VP8SetIntraUVMode(a, b.mode_uv);
  7512.         AddScore(b, l)
  7513.     }
  7514.     function SimpleQuantize(a, b) {
  7515.         var c = a.enc_;
  7516.         var d = (a.mb_[a.mb_off].type_ == 1);
  7517.         var e = 0;
  7518.         if (d) {
  7519.             e = ReconstructIntra16(a, b, a.yuv_out_, a.yuv_out_off + bk, a.preds_[a.preds_off + 0])
  7520.         } else {
  7521.             VP8IteratorStartI4(a);
  7522.             do {
  7523.                 var f = a.preds_[a.preds_off + (a.i4_ & 3) + (a.i4_ >> 2) * c.preds_w_];
  7524.                 var g = a.yuv_in_;
  7525.                 var h = a.yuv_in_off + bk + di[a.i4_];
  7526.                 var i = a.yuv_out_;
  7527.                 var j = a.yuv_out_off + bk + di[a.i4_];
  7528.                 VP8MakeIntra4Preds(a);
  7529.                 e |= ReconstructIntra4(a, b.y_ac_levels[a.i4_], g, h, i, j, f) << a.i4_
  7530.             } while (VP8IteratorRotateI4(a, a.yuv_out_, a.yuv_out_off + bk))
  7531.         }
  7532.         e |= ReconstructUV(a, b, a.yuv_out_, a.yuv_out_off + bl, a.mb_[a.mb_off].uv_mode_);
  7533.         b.nz = e
  7534.     }
  7535.     function VP8Decimate(a, b, c) {
  7536.         var d = int;
  7537.         InitScore(b);
  7538.         VP8MakeLuma16Preds(a);
  7539.         VP8MakeChroma8Preds(a);
  7540.         if (c > 0) {
  7541.             a.do_trellis_ = (c > 2) + 0;
  7542.             PickBestIntra16(a, b);
  7543.             if (a.enc_.method_ >= 2) {
  7544.                 PickBestIntra4(a, b)
  7545.             }
  7546.             PickBestUV(a, b);
  7547.             if (c == 2) {
  7548.                 a.do_trellis_ = 1;
  7549.                 SimpleQuantize(a, b)
  7550.             }
  7551.         } else {
  7552.             a.do_trellis_ = (a.enc_.method_ == 2) + 0;
  7553.             SimpleQuantize(a, b)
  7554.         }
  7555.         d = (b.nz == 0) + 0;
  7556.         VP8SetSkip(a, d);
  7557.         return d
  7558.     }
  7559.     var dw = new Array(new Array(new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128), new Array(189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128), new Array(106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128)), new Array(new Array(1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128), new Array(181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128), new Array(78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128)), new Array(new Array(1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128), new Array(184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128), new Array(77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128)), new Array(new Array(1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128), new Array(170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128), new Array(37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128)), new Array(new Array(1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128), new Array(207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128), new Array(102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128)), new Array(new Array(1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128), new Array(177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128), new Array(80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62), new Array(131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1), new Array(68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128)), new Array(new Array(1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128), new Array(184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128), new Array(81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128)), new Array(new Array(1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128), new Array(99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128), new Array(23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128)), new Array(new Array(1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128), new Array(109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128), new Array(44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128)), new Array(new Array(1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128), new Array(94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128), new Array(22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128)), new Array(new Array(1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128), new Array(124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128), new Array(35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128)), new Array(new Array(1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128), new Array(121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128), new Array(45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128)), new Array(new Array(1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128), new Array(203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128))), new Array(new Array(new Array(253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128), new Array(175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128), new Array(73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128)), new Array(new Array(1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128), new Array(239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128), new Array(155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128)), new Array(new Array(1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128), new Array(201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128), new Array(69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128)), new Array(new Array(1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128), new Array(223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128), new Array(141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128), new Array(149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128), new Array(213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128), new Array(55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255), new Array(126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128), new Array(61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128)), new Array(new Array(1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128), new Array(166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128), new Array(39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128)), new Array(new Array(1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128), new Array(124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128), new Array(24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128)), new Array(new Array(1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128), new Array(149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128), new Array(28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128)), new Array(new Array(1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128), new Array(123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128), new Array(20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128)), new Array(new Array(1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128), new Array(168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128), new Array(47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128)), new Array(new Array(1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128), new Array(141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128), new Array(42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128))));
  7560.  
  7561.     function VP8DefaultProbas(a) {
  7562.         var b = a.proba_;
  7563.         for (var i = 0; i < b.segments_.length; ++i) b.segments_[i] = 255;
  7564.         b.coeffs_ = newObjectIt(dw);
  7565.         b.use_skip_proba_ = 0
  7566.     }
  7567.     var dx = new Array(new Array(new Array(231, 120, 48, 89, 115, 113, 120, 152, 112), new Array(152, 179, 64, 126, 170, 118, 46, 70, 95), new Array(175, 69, 143, 80, 85, 82, 72, 155, 103), new Array(56, 58, 10, 171, 218, 189, 17, 13, 152), new Array(114, 26, 17, 163, 44, 195, 21, 10, 173), new Array(121, 24, 80, 195, 26, 62, 44, 64, 85), new Array(144, 71, 10, 38, 171, 213, 144, 34, 26), new Array(170, 46, 55, 19, 136, 160, 33, 206, 71), new Array(63, 20, 8, 114, 114, 208, 12, 9, 226), new Array(81, 40, 11, 96, 182, 84, 29, 16, 36)), new Array(new Array(134, 183, 89, 137, 98, 101, 106, 165, 148), new Array(72, 187, 100, 130, 157, 111, 32, 75, 80), new Array(66, 102, 167, 99, 74, 62, 40, 234, 128), new Array(41, 53, 9, 178, 241, 141, 26, 8, 107), new Array(74, 43, 26, 146, 73, 166, 49, 23, 157), new Array(65, 38, 105, 160, 51, 52, 31, 115, 128), new Array(104, 79, 12, 27, 217, 255, 87, 17, 7), new Array(87, 68, 71, 44, 114, 51, 15, 186, 23), new Array(47, 41, 14, 110, 182, 183, 21, 17, 194), new Array(66, 45, 25, 102, 197, 189, 23, 18, 22)), new Array(new Array(88, 88, 147, 150, 42, 46, 45, 196, 205), new Array(43, 97, 183, 117, 85, 38, 35, 179, 61), new Array(39, 53, 200, 87, 26, 21, 43, 232, 171), new Array(56, 34, 51, 104, 114, 102, 29, 93, 77), new Array(39, 28, 85, 171, 58, 165, 90, 98, 64), new Array(34, 22, 116, 206, 23, 34, 43, 166, 73), new Array(107, 54, 32, 26, 51, 1, 81, 43, 31), new Array(68, 25, 106, 22, 64, 171, 36, 225, 114), new Array(34, 19, 21, 102, 132, 188, 16, 76, 124), new Array(62, 18, 78, 95, 85, 57, 50, 48, 51)), new Array(new Array(193, 101, 35, 159, 215, 111, 89, 46, 111), new Array(60, 148, 31, 172, 219, 228, 21, 18, 111), new Array(112, 113, 77, 85, 179, 255, 38, 120, 114), new Array(40, 42, 1, 196, 245, 209, 10, 25, 109), new Array(88, 43, 29, 140, 166, 213, 37, 43, 154), new Array(61, 63, 30, 155, 67, 45, 68, 1, 209), new Array(100, 80, 8, 43, 154, 1, 51, 26, 71), new Array(142, 78, 78, 16, 255, 128, 34, 197, 171), new Array(41, 40, 5, 102, 211, 183, 4, 1, 221), new Array(51, 50, 17, 168, 209, 192, 23, 25, 82)), new Array(new Array(138, 31, 36, 171, 27, 166, 38, 44, 229), new Array(67, 87, 58, 169, 82, 115, 26, 59, 179), new Array(63, 59, 90, 180, 59, 166, 93, 73, 154), new Array(40, 40, 21, 116, 143, 209, 34, 39, 175), new Array(47, 15, 16, 183, 34, 223, 49, 45, 183), new Array(46, 17, 33, 183, 6, 98, 15, 32, 183), new Array(57, 46, 22, 24, 128, 1, 54, 17, 37), new Array(65, 32, 73, 115, 28, 128, 23, 128, 205), new Array(40, 3, 9, 115, 51, 192, 18, 6, 223), new Array(87, 37, 9, 115, 59, 77, 64, 21, 47)), new Array(new Array(104, 55, 44, 218, 9, 54, 53, 130, 226), new Array(64, 90, 70, 205, 40, 41, 23, 26, 57), new Array(54, 57, 112, 184, 5, 41, 38, 166, 213), new Array(30, 34, 26, 133, 152, 116, 10, 32, 134), new Array(39, 19, 53, 221, 26, 114, 32, 73, 255), new Array(31, 9, 65, 234, 2, 15, 1, 118, 73), new Array(75, 32, 12, 51, 192, 255, 160, 43, 51), new Array(88, 31, 35, 67, 102, 85, 55, 186, 85), new Array(56, 21, 23, 111, 59, 205, 45, 37, 192), new Array(55, 38, 70, 124, 73, 102, 1, 34, 98)), new Array(new Array(125, 98, 42, 88, 104, 85, 117, 175, 82), new Array(95, 84, 53, 89, 128, 100, 113, 101, 45), new Array(75, 79, 123, 47, 51, 128, 81, 171, 1), new Array(57, 17, 5, 71, 102, 57, 53, 41, 49), new Array(38, 33, 13, 121, 57, 73, 26, 1, 85), new Array(41, 10, 67, 138, 77, 110, 90, 47, 114), new Array(115, 21, 2, 10, 102, 255, 166, 23, 6), new Array(101, 29, 16, 10, 85, 128, 101, 196, 26), new Array(57, 18, 10, 102, 102, 213, 34, 20, 43), new Array(117, 20, 15, 36, 163, 128, 68, 1, 26)), new Array(new Array(102, 61, 71, 37, 34, 53, 31, 243, 192), new Array(69, 60, 71, 38, 73, 119, 28, 222, 37), new Array(68, 45, 128, 34, 1, 47, 11, 245, 171), new Array(62, 17, 19, 70, 146, 85, 55, 62, 70), new Array(37, 43, 37, 154, 100, 163, 85, 160, 1), new Array(63, 9, 92, 136, 28, 64, 32, 201, 85), new Array(75, 15, 9, 9, 64, 255, 184, 119, 16), new Array(86, 6, 28, 5, 64, 255, 25, 248, 1), new Array(56, 8, 17, 132, 137, 255, 55, 116, 128), new Array(58, 15, 20, 82, 135, 57, 26, 121, 40)), new Array(new Array(164, 50, 31, 137, 154, 133, 25, 35, 218), new Array(51, 103, 44, 131, 131, 123, 31, 6, 158), new Array(86, 40, 64, 135, 148, 224, 45, 183, 128), new Array(22, 26, 17, 131, 240, 154, 14, 1, 209), new Array(45, 16, 21, 91, 64, 222, 7, 1, 197), new Array(56, 21, 39, 155, 60, 138, 23, 102, 213), new Array(83, 12, 13, 54, 192, 255, 68, 47, 28), new Array(85, 26, 85, 85, 128, 128, 32, 146, 171), new Array(18, 11, 7, 63, 144, 171, 4, 4, 246), new Array(35, 27, 10, 146, 174, 171, 12, 26, 128)), new Array(new Array(190, 80, 35, 99, 180, 80, 126, 54, 45), new Array(85, 126, 47, 87, 176, 51, 41, 20, 32), new Array(101, 75, 128, 139, 118, 146, 116, 128, 85), new Array(56, 41, 15, 176, 236, 85, 37, 9, 62), new Array(71, 30, 17, 119, 118, 255, 17, 18, 138), new Array(101, 38, 60, 138, 55, 70, 43, 26, 142), new Array(146, 36, 19, 30, 171, 255, 97, 27, 20), new Array(138, 45, 61, 62, 219, 1, 81, 188, 64), new Array(32, 41, 20, 117, 151, 142, 20, 21, 163), new Array(112, 19, 12, 61, 195, 128, 48, 4, 24)));
  7568.  
  7569.     function PutI4Mode(a, b, c) {
  7570.         if (VP8PutBit(a, b != bd, c[0])) {
  7571.             if (VP8PutBit(a, b != B_TM_PRED, c[1])) {
  7572.                 if (VP8PutBit(a, b != B_VE_PRED, c[2])) {
  7573.                     if (!VP8PutBit(a, b >= B_LD_PRED, c[3])) {
  7574.                         if (VP8PutBit(a, b != B_HE_PRED, c[4])) {
  7575.                             VP8PutBit(a, b != B_RD_PRED, c[5])
  7576.                         }
  7577.                     } else {
  7578.                         if (VP8PutBit(a, b != B_LD_PRED, c[6])) {
  7579.                             if (VP8PutBit(a, b != B_VL_PRED, c[7])) {
  7580.                                 VP8PutBit(a, b != B_HD_PRED, c[8])
  7581.                             }
  7582.                         }
  7583.                     }
  7584.                 }
  7585.             }
  7586.         }
  7587.         return b
  7588.     }
  7589.     function PutI16Mode(a, b) {
  7590.         if (VP8PutBit(a, (b == TM_PRED || b == H_PRED), 156)) {
  7591.             VP8PutBit(a, b == TM_PRED, 128)
  7592.         } else {
  7593.             VP8PutBit(a, b == V_PRED, 163)
  7594.         }
  7595.     }
  7596.     function PutUVMode(a, b) {
  7597.         if (VP8PutBit(a, b != DC_PRED, 142)) {
  7598.             if (VP8PutBit(a, b != V_PRED, 114)) {
  7599.                 VP8PutBit(a, b != H_PRED, 183)
  7600.             }
  7601.         }
  7602.     }
  7603.     function PutSegment(a, s, p, b) {
  7604.         if (VP8PutBit(a, s >= 2, p[b + 0])) b += 1;
  7605.         VP8PutBit(a, s & 1, p[b + 1])
  7606.     }
  7607.     var dy = newObjectIt(bV);
  7608.  
  7609.     function VP8CodeIntraModes(a) {
  7610.         var b = a.bw_;
  7611.         var c = (dy);
  7612.         VP8IteratorInit(a, c);
  7613.         do {
  7614.             var d = c.mb_[c.mb_off];
  7615.             var e = c.preds_;
  7616.             var f = c.preds_off;
  7617.             if (a.segment_hdr_.update_map_) {
  7618.                 PutSegment(b, d.segment_, a.proba_.segments_, 0)
  7619.             }
  7620.             if (a.proba_.use_skip_proba_) {
  7621.                 VP8PutBit(b, d.skip_, a.proba_.skip_proba_)
  7622.             }
  7623.             if (VP8PutBit(b, (d.type_ != 0), 145)) {
  7624.                 PutI16Mode(b, e[f + 0])
  7625.             } else {
  7626.                 var g = a.preds_w_;
  7627.                 var h = e;
  7628.                 var i = f - g;
  7629.                 var x, y;
  7630.                 for (y = 0; y < 4; ++y) {
  7631.                     var j = e[f - 1];
  7632.                     for (x = 0; x < 4; ++x) {
  7633.                         var k = dx[h[i + x]][j];
  7634.                         j = PutI4Mode(b, e[f + x], k)
  7635.                     }
  7636.                     i = f;
  7637.                     f += g
  7638.                 }
  7639.             }
  7640.             PutUVMode(b, d.uv_mode_)
  7641.         } while (VP8IteratorNext(c, 0, 0))
  7642.     }
  7643.     var dz = new Array(new Array(new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255), new Array(250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255), new Array(234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255), new Array(251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))));
  7644.  
  7645.     function VP8WriteProbas(a, d) {
  7646.         var t, b, c, p;
  7647.         for (t = 0; t < NUM_TYPES; ++t) {
  7648.             for (b = 0; b < NUM_BANDS; ++b) {
  7649.                 for (c = 0; c < NUM_CTX; ++c) {
  7650.                     for (p = 0; p < NUM_PROBAS; ++p) {
  7651.                         var e = d.coeffs_[t][b][c][p];
  7652.                         var f = (e != dw[t][b][c][p]) + 0;
  7653.                         if (VP8PutBit(a, f, dz[t][b][c][p])) {
  7654.                             VP8PutValue(a, e, 8)
  7655.                         }
  7656.                     }
  7657.                 }
  7658.             }
  7659.         }
  7660.         if (VP8PutBitUniform(a, d.use_skip_proba_)) {
  7661.             VP8PutValue(a, d.skip_proba_, 8)
  7662.         }
  7663.     }
  7664.     function ClipAlpha(a) {
  7665.         return a < 0 ? 0 : a > 255 ? 255 : a
  7666.     }
  7667.     function VP8GetAlpha(a) {
  7668.         var b = 0,
  7669.             den = 0,
  7670.             val = 0;
  7671.         var k;
  7672.         var c = int;
  7673.         for (k = 0; k < bc; ++k) {
  7674.             if (a[k + 1]) {
  7675.                 val += a[k + 1];
  7676.                 b += val * (k + 1);
  7677.                 den += (k + 1) * (k + 1)
  7678.             }
  7679.         }
  7680.         c = den ? parseInt(10 * b / den - 5) : 0;
  7681.         return ClipAlpha(c)
  7682.     }
  7683.     function CollectHistogram(a, b, c, d, e, f) {
  7684.         var g = Arr(bc + 1, 0);
  7685.         var h = Arr(16, int16_t);
  7686.         var j, k;
  7687.         for (j = e; j < f; ++j) {
  7688.             dG(a, b + di[j], c, d + di[j], h);
  7689.             for (k = 0; k < 16; ++k) {
  7690.                 var v = Math.abs(h[k]) >> 2;
  7691.                 h[k] = (v > bc) ? bc : v
  7692.             }
  7693.             for (k = 0; k < 16; ++k) {
  7694.                 g[h[k]]++
  7695.             }
  7696.         }
  7697.         return VP8GetAlpha(g)
  7698.     }
  7699.     var cj = Arr((255 + 510 + 1), uint8_t);
  7700.     var ck = 0;
  7701.  
  7702.     function InitTables(a) {
  7703.         if (!ck) {
  7704.             var i;
  7705.             for (i = -255; i <= 255 + 255; ++i) {
  7706.                 cj[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i
  7707.             }
  7708.             ck = 1
  7709.         }
  7710.     }
  7711.     function clip_8b(v) {
  7712.         return (!(v & ~0xff)) ? v : v < 0 ? 0 : 255
  7713.     }
  7714.     var dA = 20091 + (1 << 16);
  7715.     var dB = 35468;
  7716.  
  7717.     function MUL(a, b) {
  7718.         return (((a) * (b)) >> 16)
  7719.     }
  7720.     var C = Arr(4 * 4, int),
  7721.         dD, tmp_off;
  7722.     tmp_off = 0;
  7723.  
  7724.     function ITransformOne(e, f, g, h, j, k) {
  7725.         var C = Arr(4 * 4, int),
  7726.             dD, tmp_off;
  7727.         tmp_off = 0;
  7728.         var i;
  7729.         dD = C;
  7730.         for (i = 0; i < 4; ++i) {
  7731.             var a = g[h + 0] + g[h + 8];
  7732.             var b = g[h + 0] - g[h + 8];
  7733.             var c = ((g[h + 4] * dB) >> 16) - ((g[h + 12] * dA) >> 16);
  7734.             var d = ((g[h + 4] * dA) >> 16) + ((g[h + 12] * dB) >> 16);
  7735.             dD[tmp_off + 0] = a + d;
  7736.             dD[tmp_off + 1] = b + c;
  7737.             dD[tmp_off + 2] = b - c;
  7738.             dD[tmp_off + 3] = a - d;
  7739.             tmp_off += 4;
  7740.             h++
  7741.         }
  7742.         tmp_off = 0;
  7743.         for (i = 0; i < 4; ++i) {
  7744.             var l = dD[tmp_off + 0] + 4;
  7745.             var a = l + dD[tmp_off + 8];
  7746.             var b = l - dD[tmp_off + 8];
  7747.             var c = ((dD[tmp_off + 4] * dB) >> 16) - ((dD[tmp_off + 12] * dA) >> 16);
  7748.             var d = ((dD[tmp_off + 4] * dA) >> 16) + ((dD[tmp_off + 12] * dB) >> 16);
  7749.             j[k + 0 + i * bf] = clip_8b(e[f + 0 + i * bf] + ((a + d) >> 3));
  7750.             j[k + 1 + i * bf] = clip_8b(e[f + 1 + i * bf] + ((b + c) >> 3));
  7751.             j[k + 2 + i * bf] = clip_8b(e[f + 2 + i * bf] + ((b - c) >> 3));
  7752.             j[k + 3 + i * bf] = clip_8b(e[f + 3 + i * bf] + ((a - d) >> 3));
  7753.             tmp_off++
  7754.         }
  7755.     }
  7756.     function ITransform(a, b, c, d, e, f, g) {
  7757.         ITransformOne(a, b, c, d, e, f);
  7758.         if (g) {
  7759.             ITransformOne(a, b + 4, c, d + 16, e, f + 4)
  7760.         }
  7761.     }
  7762.     function FTransform(a, b, c, d, e) {
  7763.         var i;
  7764.         for (i = 0; i < 4; ++i) {
  7765.             var f = a[b + 0] - c[d + 0];
  7766.             var g = a[b + 1] - c[d + 1];
  7767.             var h = a[b + 2] - c[d + 2];
  7768.             var j = a[b + 3] - c[d + 3];
  7769.             var k = (f + j) << 3;
  7770.             var l = (g + h) << 3;
  7771.             var m = (g - h) << 3;
  7772.             var n = (f - j) << 3;
  7773.             dD[0 + i * 4] = (k + l) + 0;
  7774.             dD[1 + i * 4] = (m * 2217 + n * 5352 + 14500) >> 12;
  7775.             dD[2 + i * 4] = (k - l) + 0;
  7776.             dD[3 + i * 4] = (n * 2217 - m * 5352 + 7500) >> 12;
  7777.             b += bf, d += bf
  7778.         }
  7779.         for (i = 0; i < 4; ++i) {
  7780.             var k = (dD[0 + i] + dD[12 + i]);
  7781.             var l = (dD[4 + i] + dD[8 + i]);
  7782.             var m = (dD[4 + i] - dD[8 + i]);
  7783.             var n = (dD[0 + i] - dD[12 + i]);
  7784.             e[0 + i] = (k + l + 7) >> 4;
  7785.             e[4 + i] = ((m * 2217 + n * 5352 + 12000) >> 16) + (n != 0) + 0;
  7786.             e[8 + i] = (k - l + 7) >> 4;
  7787.             e[12 + i] = ((n * 2217 - m * 5352 + 51000) >> 16)
  7788.         }
  7789.         return e
  7790.     }
  7791.     var dC = 0;
  7792.  
  7793.     function ITransformWHT(a, b) {
  7794.         dC = 0;
  7795.         var i;
  7796.         for (i = 0; i < 4; ++i) {
  7797.             var c = a[0 + i] + a[12 + i];
  7798.             var d = a[4 + i] + a[8 + i];
  7799.             var e = a[4 + i] - a[8 + i];
  7800.             var f = a[0 + i] - a[12 + i];
  7801.             dD[0 + i] = c + d;
  7802.             dD[8 + i] = c - d;
  7803.             dD[4 + i] = f + e;
  7804.             dD[12 + i] = f - e
  7805.         }
  7806.         for (i = 0; i < 4; ++i) {
  7807.             var g = dD[0 + i * 4] + 3;
  7808.             var c = g + dD[3 + i * 4];
  7809.             var d = dD[1 + i * 4] + dD[2 + i * 4];
  7810.             var e = dD[1 + i * 4] - dD[2 + i * 4];
  7811.             var f = g - dD[3 + i * 4];
  7812.             b[dC + 0][0] = (c + d) >> 3;
  7813.             b[dC + 1][0] = (f + e) >> 3;
  7814.             b[dC + 2][0] = (c - d) >> 3;
  7815.             b[dC + 3][0] = (f - e) >> 3;
  7816.             dC += 4
  7817.         }
  7818.     }
  7819.     function FTransformWHT(a, b) {
  7820.         var c = 0;
  7821.         var i;
  7822.         for (i = 0; i < 4; ++i) {
  7823.             var d = (a[c + 0][0] + a[c + 2][0]) << 2;
  7824.             var e = (a[c + 1][0] + a[c + 3][0]) << 2;
  7825.             var f = (a[c + 1][0] - a[c + 3][0]) << 2;
  7826.             var g = (a[c + 0][0] - a[c + 2][0]) << 2;
  7827.             dD[0 + i * 4] = (d + e) + (d != 0) + 0;
  7828.             dD[1 + i * 4] = g + f;
  7829.             dD[2 + i * 4] = g - f;
  7830.             dD[3 + i * 4] = d - e;
  7831.             c += 4
  7832.         }
  7833.         for (i = 0; i < 4; ++i) {
  7834.             var d = (dD[0 + i] + dD[8 + i]);
  7835.             var e = (dD[4 + i] + dD[12 + i]);
  7836.             var f = (dD[4 + i] - dD[12 + i]);
  7837.             var g = (dD[0 + i] - dD[8 + i]);
  7838.             var h = d + e;
  7839.             var j = g + f;
  7840.             var k = g - f;
  7841.             var l = d - e;
  7842.             b[0 + i] = (h + (h > 0) + 3) >> 3;
  7843.             b[4 + i] = (j + (j > 0) + 3) >> 3;
  7844.             b[8 + i] = (k + (k > 0) + 3) >> 3;
  7845.             b[12 + i] = (l + (l > 0) + 3) >> 3
  7846.         }
  7847.     }
  7848.     function Fill(a, b, c, d) {
  7849.         var j;
  7850.         for (j = 0; j < d; ++j) {
  7851.             memset_(a, b + j * bf, c, d)
  7852.         }
  7853.     }
  7854.     function VerticalPred(a, b, c, d, e) {
  7855.         var j;
  7856.         if (c) {
  7857.             for (j = 0; j < e; ++j) memcpy(b, a + j * bf, c, d, e)
  7858.         } else {
  7859.             Fill(b, a, 127, e)
  7860.         }
  7861.     }
  7862.     function HorizontalPred(a, b, c, d, e) {
  7863.         if (c) {
  7864.             var j;
  7865.             for (j = 0; j < e; ++j) {
  7866.                 memset_(b, a + j * bf, c[d + j], e)
  7867.             }
  7868.         } else {
  7869.             Fill(b, a, 129, e)
  7870.         }
  7871.     }
  7872.     function TrueMotion(a, b, c, d, e, f, g) {
  7873.         var y;
  7874.         if (c) {
  7875.             if (e) {
  7876.                 var h = cj;
  7877.                 var i = +255 - c[d - 1];
  7878.                 for (y = 0; y < g; ++y) {
  7879.                     var j = h;
  7880.                     var k = i + c[d + y];
  7881.                     var x;
  7882.                     for (x = 0; x < g; ++x) {
  7883.                         b[a + x] = j[k + e[f + x]]
  7884.                     }
  7885.                     a += bf
  7886.                 }
  7887.             } else {
  7888.                 HorizontalPred(a, b, c, d, g)
  7889.             }
  7890.         } else {
  7891.             if (e) {
  7892.                 VerticalPred(a, b, e, f, g)
  7893.             } else {
  7894.                 Fill(b, a, 129, g)
  7895.             }
  7896.         }
  7897.     }
  7898.     function DCMode(a, b, c, d, e, f, g, h, i) {
  7899.         var k = 0;
  7900.         var j;
  7901.         if (e) {
  7902.             for (j = 0; j < g; ++j) k += e[f + j];
  7903.             if (c) {
  7904.                 for (j = 0; j < g; ++j) k += c[d + j]
  7905.             } else {
  7906.                 k += k
  7907.             }
  7908.             k = (k + h) >> i
  7909.         } else if (c) {
  7910.             for (j = 0; j < g; ++j) k += c[d + j];
  7911.             k += k;
  7912.             k = (k + h) >> i
  7913.         } else {
  7914.             k = 0x80
  7915.         }
  7916.         Fill(b, a, k, g)
  7917.     }
  7918.     function IntraChromaPreds(a, b, c, d, e, f) {
  7919.         DCMode(bs + b, a, c, d, e, f, 8, 8, 4);
  7920.         VerticalPred(bu + b, a, e, f, 8);
  7921.         HorizontalPred(bv + b, a, c, d, 8);
  7922.         TrueMotion(bt + b, a, c, d, e, f, 8);
  7923.         b += 8;
  7924.         if (e) f += 8;
  7925.         if (c) d += 16;
  7926.         DCMode(bs + b, a, c, d, e, f, 8, 8, 4);
  7927.         VerticalPred(bu + b, a, e, f, 8);
  7928.         HorizontalPred(bv + b, a, c, d, 8);
  7929.         TrueMotion(bt + b, a, c, d, e, f, 8)
  7930.     }
  7931.     function Intra16Preds(a, b, c, d, e, f) {
  7932.         DCMode(bo + b, a, c, d, e, f, 16, 16, 5);
  7933.         VerticalPred(bq + b, a, e, f, 16);
  7934.         HorizontalPred(br + b, a, c, d, 16);
  7935.         TrueMotion(bp + b, a, c, d, e, f, 16)
  7936.     }
  7937.     function AVG3(a, b, c) {
  7938.         return (((a) + 2 * (b) + (c) + 2) >> 2)
  7939.     };
  7940.  
  7941.     function AVG2(a, b) {
  7942.         return (((a) + (b) + 1) >> 1)
  7943.     };
  7944.  
  7945.     function VE4(a, b, c, d) {
  7946.         var e = new Array();
  7947.         e.push(AVG3(c[d - 1], c[d + 0], c[d + 1]));
  7948.         e.push(AVG3(c[d + 0], c[d + 1], c[d + 2]));
  7949.         e.push(AVG3(c[d + 1], c[d + 2], c[d + 3]));
  7950.         e.push(AVG3(c[d + 2], c[d + 3], c[d + 4]));
  7951.         var i;
  7952.         for (i = 0; i < 4; ++i) {
  7953.             memcpy(b, a + i * bf, e, 0, 4)
  7954.         }
  7955.     }
  7956.     function HE4(a, b, c, d) {
  7957.         var X = c[d - 1];
  7958.         var I = c[d - 2];
  7959.         var J = c[d - 3];
  7960.         var K = c[d - 4];
  7961.         var L = c[d - 5];
  7962.         b[a + 0 + 0 * bf] = b[a + 1 + 0 * bf] = b[a + 2 + 0 * bf] = b[a + 3 + 0 * bf] = AVG3(X, I, J);
  7963.         b[a + 0 + 1 * bf] = b[a + 1 + 1 * bf] = b[a + 2 + 1 * bf] = b[a + 3 + 1 * bf] = AVG3(I, J, K);
  7964.         b[a + 0 + 2 * bf] = b[a + 1 + 2 * bf] = b[a + 2 + 2 * bf] = b[a + 3 + 2 * bf] = AVG3(J, K, L);
  7965.         b[a + 0 + 3 * bf] = b[a + 1 + 3 * bf] = b[a + 2 + 3 * bf] = b[a + 3 + 3 * bf] = AVG3(K, L, L)
  7966.     }
  7967.     function DC4(a, b, c, d) {
  7968.         var e = 4;
  7969.         var i;
  7970.         for (i = 0; i < 4; ++i) e += c[d + i] + c[d - 5 + i];
  7971.         Fill(b, a, e >> 3, 4)
  7972.     }
  7973.     function RD4(a, b, c, d) {
  7974.         var X = c[d - 1];
  7975.         var I = c[d - 2];
  7976.         var J = c[d - 3];
  7977.         var K = c[d - 4];
  7978.         var L = c[d - 5];
  7979.         var A = c[d + 0];
  7980.         var B = c[d + 1];
  7981.         var C = c[d + 2];
  7982.         var D = c[d + 3];
  7983.         b[a + (0) + (3) * bf] = AVG3(J, K, L);
  7984.         b[a + (0) + (2) * bf] = b[a + (1) + (3) * bf] = AVG3(I, J, K);
  7985.         b[a + (0) + (1) * bf] = b[a + (1) + (2) * bf] = b[a + (2) + (3) * bf] = AVG3(X, I, J);
  7986.         b[a + (0) + (0) * bf] = b[a + (1) + (1) * bf] = b[a + (2) + (2) * bf] = b[a + (3) + (3) * bf] = AVG3(A, X, I);
  7987.         b[a + (1) + (0) * bf] = b[a + (2) + (1) * bf] = b[a + (3) + (2) * bf] = AVG3(B, A, X);
  7988.         b[a + (2) + (0) * bf] = b[a + (3) + (1) * bf] = AVG3(C, B, A);
  7989.         b[a + (3) + (0) * bf] = AVG3(D, C, B)
  7990.     }
  7991.     function LD4(a, b, c, d) {
  7992.         var A = c[d + 0];
  7993.         var B = c[d + 1];
  7994.         var C = c[d + 2];
  7995.         var D = c[d + 3];
  7996.         var E = c[d + 4];
  7997.         var F = c[d + 5];
  7998.         var G = c[d + 6];
  7999.         var H = c[d + 7];
  8000.         b[a + (0) + (0) * bf] = AVG3(A, B, C);
  8001.         b[a + (1) + (0) * bf] = b[a + (0) + (1) * bf] = AVG3(B, C, D);
  8002.         b[a + (2) + (0) * bf] = b[a + (1) + (1) * bf] = b[a + (0) + (2) * bf] = AVG3(C, D, E);
  8003.         b[a + (3) + (0) * bf] = b[a + (2) + (1) * bf] = b[a + (1) + (2) * bf] = b[a + (0) + (3) * bf] = AVG3(D, E, F);
  8004.         b[a + (3) + (1) * bf] = b[a + (2) + (2) * bf] = b[a + (1) + (3) * bf] = AVG3(E, F, G);
  8005.         b[a + (3) + (2) * bf] = b[a + (2) + (3) * bf] = AVG3(F, G, H);
  8006.         b[a + (3) + (3) * bf] = AVG3(G, H, H)
  8007.     }
  8008.     function VR4(a, b, c, d) {
  8009.         var X = c[d - 1];
  8010.         var I = c[d - 2];
  8011.         var J = c[d - 3];
  8012.         var K = c[d - 4];
  8013.         var A = c[d + 0];
  8014.         var B = c[d + 1];
  8015.         var C = c[d + 2];
  8016.         var D = c[d + 3];
  8017.         b[a + (0) + (0) * bf] = b[a + (1) + (2) * bf] = AVG2(X, A);
  8018.         b[a + (1) + (0) * bf] = b[a + (2) + (2) * bf] = AVG2(A, B);
  8019.         b[a + (2) + (0) * bf] = b[a + (3) + (2) * bf] = AVG2(B, C);
  8020.         b[a + (3) + (0) * bf] = AVG2(C, D);
  8021.         b[a + (0) + (3) * bf] = AVG3(K, J, I);
  8022.         b[a + (0) + (2) * bf] = AVG3(J, I, X);
  8023.         b[a + (0) + (1) * bf] = b[a + (1) + (3) * bf] = AVG3(I, X, A);
  8024.         b[a + (1) + (1) * bf] = b[a + (2) + (3) * bf] = AVG3(X, A, B);
  8025.         b[a + (2) + (1) * bf] = b[a + (3) + (3) * bf] = AVG3(A, B, C);
  8026.         b[a + (3) + (1) * bf] = AVG3(B, C, D)
  8027.     }
  8028.     function VL4(a, b, c, d) {
  8029.         var A = c[d + 0];
  8030.         var B = c[d + 1];
  8031.         var C = c[d + 2];
  8032.         var D = c[d + 3];
  8033.         var E = c[d + 4];
  8034.         var F = c[d + 5];
  8035.         var G = c[d + 6];
  8036.         var H = c[d + 7];
  8037.         b[a + (0) + (0) * bf] = AVG2(A, B);
  8038.         b[a + (1) + (0) * bf] = b[a + (0) + (2) * bf] = AVG2(B, C);
  8039.         b[a + (2) + (0) * bf] = b[a + (1) + (2) * bf] = AVG2(C, D);
  8040.         b[a + (3) + (0) * bf] = b[a + (2) + (2) * bf] = AVG2(D, E);
  8041.         b[a + (0) + (1) * bf] = AVG3(A, B, C);
  8042.         b[a + (1) + (1) * bf] = b[a + (0) + (3) * bf] = AVG3(B, C, D);
  8043.         b[a + (2) + (1) * bf] = b[a + (1) + (3) * bf] = AVG3(C, D, E);
  8044.         b[a + (3) + (1) * bf] = b[a + (2) + (3) * bf] = AVG3(D, E, F);
  8045.         b[a + (3) + (2) * bf] = AVG3(E, F, G);
  8046.         b[a + (3) + (3) * bf] = AVG3(F, G, H)
  8047.     }
  8048.     function HU4(a, b, c, d) {
  8049.         var I = c[d - 2];
  8050.         var J = c[d - 3];
  8051.         var K = c[d - 4];
  8052.         var L = c[d - 5];
  8053.         b[a + (0) + (0) * bf] = AVG2(I, J);
  8054.         b[a + (2) + (0) * bf] = b[a + (0) + (1) * bf] = AVG2(J, K);
  8055.         b[a + (2) + (1) * bf] = b[a + (0) + (2) * bf] = AVG2(K, L);
  8056.         b[a + (1) + (0) * bf] = AVG3(I, J, K);
  8057.         b[a + (3) + (0) * bf] = b[a + (1) + (1) * bf] = AVG3(J, K, L);
  8058.         b[a + (3) + (1) * bf] = b[a + (1) + (2) * bf] = AVG3(K, L, L);
  8059.         b[a + (3) + (2) * bf] = b[a + (2) + (2) * bf] = b[a + (0) + (3) * bf] = b[a + (1) + (3) * bf] = b[a + (2) + (3) * bf] = b[a + (3) + (3) * bf] = L
  8060.     }
  8061.     function HD4(a, b, c, d) {
  8062.         var X = c[d - 1];
  8063.         var I = c[d - 2];
  8064.         var J = c[d - 3];
  8065.         var K = c[d - 4];
  8066.         var L = c[d - 5];
  8067.         var A = c[d + 0];
  8068.         var B = c[d + 1];
  8069.         var C = c[d + 2];
  8070.         b[a + (0) + (0) * bf] = b[a + (2) + (1) * bf] = AVG2(I, X);
  8071.         b[a + (0) + (1) * bf] = b[a + (2) + (2) * bf] = AVG2(J, I);
  8072.         b[a + (0) + (2) * bf] = b[a + (2) + (3) * bf] = AVG2(K, J);
  8073.         b[a + (0) + (3) * bf] = AVG2(L, K);
  8074.         b[a + (3) + (0) * bf] = AVG3(A, B, C);
  8075.         b[a + (2) + (0) * bf] = AVG3(X, A, B);
  8076.         b[a + (1) + (0) * bf] = b[a + (3) + (1) * bf] = AVG3(I, X, A);
  8077.         b[a + (1) + (1) * bf] = b[a + (3) + (2) * bf] = AVG3(J, I, X);
  8078.         b[a + (1) + (2) * bf] = b[a + (3) + (3) * bf] = AVG3(K, J, I);
  8079.         b[a + (1) + (3) * bf] = AVG3(L, K, J)
  8080.     }
  8081.     function TM4(a, b, c, d) {
  8082.         var x, y;
  8083.         var e = cj;
  8084.         var f = +255 - c[d - 1];
  8085.         for (y = 0; y < 4; ++y) {
  8086.             var g = e;
  8087.             var h = f + c[d - 2 - y];
  8088.             for (x = 0; x < 4; ++x) {
  8089.                 b[a + x] = g[h + c[d + x]]
  8090.             }
  8091.             a += bf
  8092.         }
  8093.     }
  8094.     function Intra4Preds(a, b, c, d) {
  8095.         DC4(bw + b, a, c, d);
  8096.         TM4(bx + b, a, c, d);
  8097.         VE4(by + b, a, c, d);
  8098.         HE4(bz + b, a, c, d);
  8099.         RD4(bA + b, a, c, d);
  8100.         VR4(bB + b, a, c, d);
  8101.         LD4(bC + b, a, c, d);
  8102.         VL4(bD + b, a, c, d);
  8103.         HD4(bE + b, a, c, d);
  8104.         HU4(bF + b, a, c, d)
  8105.     }
  8106.     function GetSSE(a, c, b, d, w, h) {
  8107.         var e = 0;
  8108.         var y, x;
  8109.         for (y = 0; y < h; ++y) {
  8110.             for (x = 0; x < w; ++x) {
  8111.                 var f = a[c + x] - b[d + x];
  8112.                 e += f * f
  8113.             }
  8114.             c += bf;
  8115.             d += bf
  8116.         }
  8117.         return e
  8118.     }
  8119.     function SSE16x16(a, c, b, d) {
  8120.         return GetSSE(a, c, b, d, 16, 16)
  8121.     }
  8122.     function SSE16x8(a, c, b, d) {
  8123.         return GetSSE(a, c, b, d, 16, 8)
  8124.     }
  8125.     function SSE8x8(a, c, b, d) {
  8126.         return GetSSE(a, c, b, d, 8, 8)
  8127.     }
  8128.     function SSE4x4(a, c, b, d) {
  8129.         return GetSSE(a, c, b, d, 4, 4)
  8130.     }
  8131.     var dD = Arr(16, int);
  8132.  
  8133.     function TTransform(a, b, w) {
  8134.         var c = 0;
  8135.         var i;
  8136.         var d = 0;
  8137.         for (i = 0; i < 4; ++i) {
  8138.             var e = (a[b + 0] + a[b + 2]) << 2;
  8139.             var f = (a[b + 1] + a[b + 3]) << 2;
  8140.             var g = (a[b + 1] - a[b + 3]) << 2;
  8141.             var h = (a[b + 0] - a[b + 2]) << 2;
  8142.             dD[0 + i * 4] = e + f + (e != 0) + 0;
  8143.             dD[1 + i * 4] = h + g;
  8144.             dD[2 + i * 4] = h - g;
  8145.             dD[3 + i * 4] = e - f;
  8146.             b += bf
  8147.         }
  8148.         for (i = 0; i < 4; ++i) {
  8149.             var e = (dD[0 + i] + dD[8 + i]);
  8150.             var f = (dD[4 + i] + dD[12 + i]);
  8151.             var g = (dD[4 + i] - dD[12 + i]);
  8152.             var h = (dD[0 + i] - dD[8 + i]);
  8153.             var j = e + f;
  8154.             var k = h + g;
  8155.             var l = h - g;
  8156.             var m = e - f;
  8157.             c += w[d + 0] * ((Math.abs(j) + 3) >> 3);
  8158.             c += w[d + 4] * ((Math.abs(k) + 3) >> 3);
  8159.             c += w[d + 8] * ((Math.abs(l) + 3) >> 3);
  8160.             c += w[d + 12] * ((Math.abs(m) + 3) >> 3);
  8161.             ++d
  8162.         }
  8163.         return c
  8164.     }
  8165.     function Disto4x4(a, c, b, d, w) {
  8166.         var e = TTransform(a, c, w);
  8167.         var f = TTransform(b, d, w);
  8168.         return (Math.abs(f - e) + 8) >> 4
  8169.     }
  8170.     function Disto16x16(a, c, b, d, w) {
  8171.         var D = 0;
  8172.         var x, y = int;
  8173.         for (y = 0; y < 16 * bf; y += 4 * bf) {
  8174.             for (x = 0; x < 16; x += 4) {
  8175.                 D += Disto4x4(a, c + x + y, b, d + x + y, w)
  8176.             }
  8177.         }
  8178.         return D
  8179.     }
  8180.     function QuantizeBlock(a, b, n, c) {
  8181.         var d = -1;
  8182.         for (; n < 16; ++n) {
  8183.             var j = cV[n];
  8184.             var e = (a[j] < 0);
  8185.             var f = (e ? -a[j] : a[j]) + c.sharpen_[j];
  8186.             if (f > 2047) f = 2047;
  8187.             if (f > c.zthresh_[j]) {
  8188.                 var Q = c.q_[j];
  8189.                 var g = c.iq_[j];
  8190.                 var B = c.bias_[j];
  8191.                 b[n] = QUANTDIV(f, g, B);
  8192.                 if (e) b[n] = -b[n];
  8193.                 a[j] = b[n] * Q;
  8194.                 if (b[n]) d = n
  8195.             } else {
  8196.                 b[n] = 0;
  8197.                 a[j] = 0
  8198.             }
  8199.         }
  8200.         return (d >= 0) + 0
  8201.     }
  8202.     function Copy(a, b, c, d, e) {
  8203.         var y;
  8204.         for (y = 0; y < e; ++y) {
  8205.             memcpy(c, d, a, b, e);
  8206.             b += bf;
  8207.             d += bf
  8208.         }
  8209.     }
  8210.     function Copy4x4(a, b, c, d) {
  8211.         Copy(a, b, c, d, 4)
  8212.     }
  8213.     function Copy8x8(a, b, c, d) {
  8214.         Copy(a, b, c, d, 8)
  8215.     }
  8216.     function Copy16x16(a, b, c, d) {
  8217.         Copy(a, b, c, d, 16)
  8218.     }
  8219.     var dE;
  8220.     var dF;
  8221.     var dG;
  8222.     var dH;
  8223.     var dI;
  8224.     var dJ;
  8225.     var dK;
  8226.     var dL;
  8227.     var dM;
  8228.     var dN;
  8229.     var dO;
  8230.     var dP;
  8231.     var dQ;
  8232.     var dR;
  8233.     var dS;
  8234.     var dT;
  8235.     var dU;
  8236.     var dV;
  8237.  
  8238.     function VP8EncDspInit(a) {
  8239.         InitTables();
  8240.         dE = CollectHistogram;
  8241.         dF = ITransform;
  8242.         dG = FTransform;
  8243.         dH = ITransformWHT;
  8244.         dI = FTransformWHT;
  8245.         dJ = Intra4Preds;
  8246.         dK = Intra16Preds;
  8247.         dL = IntraChromaPreds;
  8248.         dM = SSE16x16;
  8249.         dN = SSE8x8;
  8250.         dO = SSE16x8;
  8251.         dP = SSE4x4;
  8252.         dQ = Disto4x4;
  8253.         dR = Disto16x16;
  8254.         dS = QuantizeBlock;
  8255.         dT = Copy4x4;
  8256.         dU = Copy8x8;
  8257.         dV = Copy16x16
  8258.     }
  8259.     function WebPConfigInitInternal(a, b, c, d) {
  8260.         if (d != N) {
  8261.             return 0
  8262.         }
  8263.         if (a == null) return 0;
  8264.         a.quality = c;
  8265.         a.target_size = 0;
  8266.         a.target_PSNR = 0.;
  8267.         a.method = 3;
  8268.         a.sns_strength = 50;
  8269.         a.filter_strength = 20;
  8270.         a.filter_sharpness = 0;
  8271.         a.filter_type = 0;
  8272.         a.partitions = 0;
  8273.         a.segments = 4;
  8274.         a.pass = 1;
  8275.         a.show_compressed = 0;
  8276.         a.preprocessing = 0;
  8277.         a.autofilter = 0;
  8278.         a.alpha_compression = 0;
  8279.         a.partition_limit = 0;
  8280.         if (ea) {
  8281.             a.quality = ea.quality ? ea.quality : c;
  8282.             a.target_size = ea.target_size ? ea.target_size : 0;
  8283.             a.target_PSNR = ea.target_PSNR ? ea.target_PSNR : 0.;
  8284.             a.method = ea.method ? ea.method : 0;
  8285.             a.sns_strength = ea.sns_strength ? ea.sns_strength : 50;
  8286.             a.filter_strength = ea.filter_strength ? ea.filter_strength : 20;
  8287.             a.filter_sharpness = ea.filter_sharpness ? ea.filter_sharpness : 0;
  8288.             a.filter_type = ea.filter_type ? ea.filter_type : 0;
  8289.             a.partitions = ea.partitions ? ea.partitions : 0;
  8290.             a.segments = ea.segments ? ea.segments : 4;
  8291.             a.pass = ea.pass ? ea.pass : 1;
  8292.             a.show_compressed = ea.show_compressed ? ea.show_compressed : 0;
  8293.             a.preprocessing = ea.preprocessing ? ea.preprocessing : 0;
  8294.             a.autofilter = ea.autofilter ? ea.autofilter : 0;
  8295.             a.alpha_compression = ea.alpha_compression ? ea.alpha_compression : 0;
  8296.             a.partition_limit = ea.partition_limit ? ea.partition_limit : 0;
  8297.             b = ea.Preset ? ea.preset : P.WEBP_PRESET_DEFAULT
  8298.         }
  8299.         switch (b) {
  8300.         case P.WEBP_PRESET_PICTURE:
  8301.             a.sns_strength = 80;
  8302.             a.filter_sharpness = 4;
  8303.             a.filter_strength = 35;
  8304.             break;
  8305.         case P.WEBP_PRESET_PHOTO:
  8306.             a.sns_strength = 80;
  8307.             a.filter_sharpness = 3;
  8308.             a.filter_strength = 30;
  8309.             break;
  8310.         case P.WEBP_PRESET_DRAWING:
  8311.             a.sns_strength = 25;
  8312.             a.filter_sharpness = 6;
  8313.             a.filter_strength = 10;
  8314.             break;
  8315.         case P.WEBP_PRESET_ICON:
  8316.             a.sns_strength = 0;
  8317.             a.filter_strength = 0;
  8318.             break;
  8319.         case P.WEBP_PRESET_TEXT:
  8320.             a.sns_strength = 0;
  8321.             a.filter_strength = 0;
  8322.             a.segments = 2;
  8323.             break;
  8324.         case P.WEBP_PRESET_DEFAULT:
  8325.         default:
  8326.             break
  8327.         }
  8328.         return WebPValidateConfig(a)
  8329.     }
  8330.     function WebPValidateConfig(a) {
  8331.         if (a == null) return 0;
  8332.         if (a.quality < 0 || a.quality > 100) return 0;
  8333.         if (a.target_size < 0) return 0;
  8334.         if (a.target_PSNR < 0) return 0;
  8335.         if (a.method < 0 || a.method > 6) return 0;
  8336.         if (a.segments < 1 || a.segments > 4) return 0;
  8337.         if (a.sns_strength < 0 || a.sns_strength > 100) return 0;
  8338.         if (a.filter_strength < 0 || a.filter_strength > 100) return 0;
  8339.         if (a.filter_sharpness < 0 || a.filter_sharpness > 7) return 0;
  8340.         if (a.filter_type < 0 || a.filter_type > 1) return 0;
  8341.         if (a.autofilter < 0 || a.autofilter > 1) return 0;
  8342.         if (a.pass < 1 || a.pass > 10) return 0;
  8343.         if (a.show_compressed < 0 || a.show_compressed > 1) return 0;
  8344.         if (a.preprocessing < 0 || a.preprocessing > 1) return 0;
  8345.         if (a.partitions < 0 || a.partitions > 3) return 0;
  8346.         if (a.partition_limit < 0 || a.partition_limit > 100) return 0;
  8347.         if (a.alpha_compression < 0) return 0;
  8348.         return 1
  8349.     }
  8350.     var dW = 16384;
  8351.     this.WebPGetEncoderVersion = function (a) {
  8352.         return (Z << 16) | (ba << 8) | bb
  8353.     };
  8354.  
  8355.     function DummyWriter(a, b, c) {
  8356.         return 1
  8357.     }
  8358.     function WebPPictureInitInternal(d, e) {
  8359.         if (e != N) {
  8360.             return 0
  8361.         }
  8362.         if (d) {
  8363.             d = newObjectIt(V);
  8364.             d.writer = function DummyWriter(a, b, c) {};
  8365.             WebPEncodingSetError(d, U)
  8366.         }
  8367.         return 1
  8368.     }
  8369.     function ResetSegmentHeader(a) {
  8370.         var b = a.segment_hdr_;
  8371.         b.num_segments_ = a.config_.segments;
  8372.         b.update_map_ = (b.num_segments_ > 1) + 0;
  8373.         b.size_ = 0
  8374.     }
  8375.     function ResetFilterHeader(a) {
  8376.         var b = a.filter_hdr_;
  8377.         b.simple_ = 1;
  8378.         b.level_ = 0;
  8379.         b.sharpness_ = 0;
  8380.         b.i4x4_lf_delta_ = 0
  8381.     }
  8382.     function ResetBoundaryPredictions(a) {
  8383.         var i;
  8384.         var b = a.preds_;
  8385.         var c = a.preds_off - a.preds_w_;
  8386.         var d = a.preds_;
  8387.         var e = a.preds_off - 1;
  8388.         for (i = -1; i < 4 * a.mb_w_; ++i) {
  8389.             b[c + i] = bd
  8390.         }
  8391.         for (i = 0; i < 4 * a.mb_h_; ++i) {
  8392.             d[e + i * a.preds_w_] = bd
  8393.         }
  8394.         a.nz_[1 - 1] = 0
  8395.     }
  8396.     function MapConfigToTools(a) {
  8397.         var b = a.config_.method;
  8398.         var c = 100 - a.config_.partition_limit;
  8399.         a.method_ = b;
  8400.         a.rd_opt_level_ = (b >= 6) ? 3 : (b >= 5) ? 2 : (b >= 3) ? 1 : 0;
  8401.         a.max_i4_header_bits_ = parseInt(256 * 16 * 16 * (c * c) / (100 * 100))
  8402.     }
  8403.     function InitEncoder(a, b) {
  8404.         var c = (a.filter_strength > 0) || (a.autofilter > 0);
  8405.         var d = (b.width + 15) >> 4;
  8406.         var e = (b.height + 15) >> 4;
  8407.         var f = 4 * d + 1;
  8408.         var g = 4 * e + 1;
  8409.         var h = f * g * sizeof(uint8_t);
  8410.         var i = d * 16;
  8411.         var j = (d + 1) * sizeof(uint32_t);
  8412.         var k = (3 * bi + bj) * sizeof(uint8_t);
  8413.         var l = d * e * sizeof(bQ);
  8414.         var m = (2 * i + 16 + 16 + 16 + 8 + 1 + 2 * bn) * sizeof(uint8_t);
  8415.         var n = a.autofilter ? sizeof(bM) + bn : 0;
  8416.         var o = newObjectIt(bT);
  8417.         var p = uint8_t;
  8418.         var q = sizeof(bT) + bn + k + l + h + m + j + n;
  8419.         p = malloc(q, uint8_t);
  8420.         if (p == null) {
  8421.             WebPEncodingSetError(b, VP8_ENC_ERROR_OUT_OF_MEMORY);
  8422.             return null
  8423.         }
  8424.         o.num_parts_ = 1 << a.partitions;
  8425.         o.mb_w_ = d;
  8426.         o.mb_h_ = e;
  8427.         o.preds_w_ = f;
  8428.         o.yuv_in_ = membuild(uint8_t, bi);
  8429.         o.yuv_out_ = membuild(uint8_t, bi);
  8430.         o.yuv_out2_ = membuild(uint8_t, bi);
  8431.         o.yuv_p_ = membuild(uint8_t, bj);
  8432.         o.mb_info_ = Arr_nOI(l, bQ);
  8433.         o.preds_ = Arr((f * g * sizeof(uint8_t) + 1 + o.preds_w_), uint8_t);
  8434.         o.preds_off = +1 + o.preds_w_;
  8435.         o.nz_ = Arr(1 + j, uint8_t);
  8436.         o.nz_off = 1;
  8437.         o.lf_stats_ = n ? newObjectIt(bM) : null;
  8438.         o.y_top_ = Arr((2 * i + (16) + (16 + 16) + (16) + (8)), uint8_t);
  8439.         o.y_top_off = 0;
  8440.         o.uv_top_ = o.y_top_;
  8441.         o.uv_top_off = o.y_top_off + i;
  8442.         o.y_left_ = o.uv_top_;
  8443.         o.y_left_off = (2 * i) + (16);
  8444.         o.u_left_ = o.y_left_;
  8445.         o.u_left_off = o.y_left_off + (16 + 16);
  8446.         o.v_left_ = o.u_left_;
  8447.         o.v_left_off = o.u_left_off + (16);
  8448.         o.config_ = a;
  8449.         o.profile_ = c ? ((a.filter_type == 1) ? 0 : 1) : 2;
  8450.         o.pic_ = b;
  8451.         MapConfigToTools(o);
  8452.         VP8EncDspInit();
  8453.         VP8DefaultProbas(o);
  8454.         ResetSegmentHeader(o);
  8455.         ResetFilterHeader(o);
  8456.         ResetBoundaryPredictions(o);
  8457.         VP8EncInitAlpha(o);
  8458.         VP8EncInitLayer(o);
  8459.         return o
  8460.     }
  8461.     function DeleteEncoder(a) {
  8462.         if (a) {
  8463.             VP8EncDeleteAlpha(a);
  8464.             VP8EncDeleteLayer(a);
  8465.             a = ''
  8466.         }
  8467.     }
  8468.     function GetPSNR(a, b) {
  8469.         return a ? 10. * (Math.LOG10E * Math.log(255. * 255. * b / a)) : 99.
  8470.     }
  8471.     function FinalizePSNR(a) {
  8472.         var b = a.pic_.stats;
  8473.         var c = a.sse_count_;
  8474.         var d = a.sse_;
  8475.         b.PSNR[0] = parseFloat(GetPSNR(d[0], c));
  8476.         b.PSNR[1] = parseFloat(GetPSNR(d[1], c / 4));
  8477.         b.PSNR[2] = parseFloat(GetPSNR(d[2], c / 4));
  8478.         b.PSNR[3] = parseFloat(GetPSNR(d[0] + d[1] + d[2], c * 3 / 2))
  8479.     }
  8480.     function StoreStats(a) {
  8481.         var b = a.pic_.stats;
  8482.         var c = a.pic_.stats_nozero;
  8483.         if (c) {
  8484.             var i, s;
  8485.             for (i = 0; i < be; ++i) {
  8486.                 b.segment_level[i] = a.dqm_[i].fstrength_;
  8487.                 b.segment_quant[i] = a.dqm_[i].quant_;
  8488.                 for (s = 0; s <= 2; ++s) {
  8489.                     b.residual_bytes[s][i] = a.residual_bytes_[s][i]
  8490.                 }
  8491.             }
  8492.             FinalizePSNR(a);
  8493.             b.coded_size = a.coded_size_;
  8494.             for (i = 0; i < 3; ++i) {
  8495.                 b.block_count[i] = a.block_count_[i]
  8496.             }
  8497.         }
  8498.     }
  8499.     function WebPEncodingSetError(a, b) {
  8500.         assert(b <= VP8_ENC_ERROR_BAD_WRITE);
  8501.         assert(b >= U);
  8502.         a.error_code = b;
  8503.         return 0
  8504.     }
  8505.     function WebPEncode(a, b) {
  8506.         var c = newObjectIt(bT);
  8507.         var d = int;
  8508.         if (b == null) return 0;
  8509.         WebPEncodingSetError(b, U);
  8510.         if (a == null) return WebPEncodingSetError(b, VP8_ENC_ERROR_NULL_PARAMETER);
  8511.         if (!WebPValidateConfig(a)) return WebPEncodingSetError(b, VP8_ENC_ERROR_INVALID_CONFIGURATION);
  8512.         if (b.width <= 0 || b.height <= 0) return WebPEncodingSetError(b, VP8_ENC_ERROR_BAD_DIMENSION);
  8513.         if (b.y == null || b.u == null || b.v == null) return WebPEncodingSetError(b, VP8_ENC_ERROR_NULL_PARAMETER);
  8514.         if (b.width >= dW || b.height >= dW) return WebPEncodingSetError(b, VP8_ENC_ERROR_BAD_DIMENSION);
  8515.         c = InitEncoder(a, b);
  8516.         if (c == null) return 0;
  8517.         d = VP8EncAnalyze(c) && VP8StatLoop(c) && VP8EncLoop(c) && VP8EncFinishAlpha(c) && VP8EncFinishLayer(c) && VP8EncWrite(c);
  8518.         StoreStats(c);
  8519.         DeleteEncoder(c);
  8520.         return d
  8521.     }
  8522.     function WebPPictureAlloc(a) {
  8523.         if (a.extra_info_type) AllocExtraInfo(a);
  8524.         if (a) {
  8525.             var b = a.colorspace & WEBP_CSP_UV_MASK;
  8526.             var c = a.colorspace & WEBP_CSP_ALPHA_BIT;
  8527.             var d = a.width;
  8528.             var e = a.height;
  8529.             var f = d;
  8530.             var g = parseInt((d + 1) / 2);
  8531.             var h = parseInt((e + 1) / 2);
  8532.             var i = g;
  8533.             var j = 0;
  8534.             var k = int,
  8535.                 a_stride = int;
  8536.             var l = uint64_t,
  8537.                 uv_size = uint64_t,
  8538.                 uv0_size = uint64_t,
  8539.                 a_size = uint64_t,
  8540.                 total_size = uint64_t;
  8541.             var m = uint8_t;
  8542.             var n = 0;
  8543.             switch (b) {
  8544.             case T:
  8545.                 break;
  8546.             case WEBP_YUV400:
  8547.                 break;
  8548.             case WEBP_YUV422:
  8549.                 j = g;
  8550.                 break;
  8551.             case WEBP_YUV444:
  8552.                 j = d;
  8553.                 break;
  8554.             default:
  8555.                 return 0
  8556.             }
  8557.             uv0_size = e * j;
  8558.             k = c ? d : 0;
  8559.             a_stride = k;
  8560.             l = f * e;
  8561.             uv_size = i * h;
  8562.             a_size = a_stride * e;
  8563.             total_size = l + a_size + 2 * uv_size + 2 * uv0_size;
  8564.             if (d <= 0 || e <= 0 || g < 0 || h < 0 || l >= (64 * 64 * 64 * 16 << 40) || total_size != total_size) {
  8565.                 return 0
  8566.             }
  8567.             a.y_stride = f;
  8568.             a.uv_stride = i;
  8569.             a.a_stride = a_stride;
  8570.             a.uv0_stride = j;
  8571.             WebPPictureFree(a);
  8572.             a.y = malloc(total_size, uint8_t);
  8573.             a.y_off = 0;
  8574.             if (a.y == null) return 0;
  8575.             a.u = a.y;
  8576.             a.u_off = a.y_off + l;
  8577.             a.v = a.u;
  8578.             a.v_off = a.u_off + uv_size;
  8579.             m = malloc(total_size, uint8_t);
  8580.             if (m == null) return 0;
  8581.             a.y = m;
  8582.             a.y_off = n;
  8583.             n += l;
  8584.             a.u = m;
  8585.             a.u_off = n;
  8586.             n += uv_size;
  8587.             a.v = m;
  8588.             a.v_off = n;
  8589.             n += uv_size;
  8590.             if (a_size) {
  8591.                 a.a = malloc(a_size, uint8_t);
  8592.                 a.a_off = 0
  8593.             }
  8594.             if (uv0_size) {
  8595.                 a.u0 = m;
  8596.                 a.u0_off = n;
  8597.                 n += uv0_size;
  8598.                 a.v0 = m;
  8599.                 a.v0_off = n;
  8600.                 n += uv0_size
  8601.             }
  8602.         }
  8603.         return 1
  8604.     }
  8605.     function WebPPictureGrabSpecs(a, b) {
  8606.         if (a) b = a;
  8607.         b.y = b.u = b.v = null;
  8608.         b.y_off = b.u_off = b.v_off = null;
  8609.         b.u0 = b.v0 = null;
  8610.         b.u0_off = b.v0_off = null;
  8611.         b.a = null;
  8612.         b.a_off = null
  8613.     }
  8614.     function WebPPictureFree(a) {
  8615.         if (a) {
  8616.             a.y = '';
  8617.             a.y = a.u = a.v = null;
  8618.             a.y_off = a.u_off = a.v_off = 0;
  8619.             WebPPictureGrabSpecs(null, a)
  8620.         }
  8621.     }
  8622.     var dX = {
  8623.         mem: uint8_t,
  8624.         mem_off: 0,
  8625.         max_size: size_t,
  8626.         size: size_t,
  8627.         size_off: 0
  8628.     };
  8629.  
  8630.     function InitMemoryWriter(a) {
  8631.         a.mem = null;
  8632.         a.mem_off = 0;
  8633.         a.size = 0;
  8634.         a.max_size = 0
  8635.     }
  8636.     function WebPMemoryWrite(a, b, c) {
  8637.         var w = c.custom_ptr;
  8638.         var d = size_t;
  8639.         if (w == null) {
  8640.             alert('w is null');
  8641.             return 1
  8642.         }
  8643.         d = (w.size) + b;
  8644.         if (d > w.max_size) {
  8645.             var e = uint8_t;
  8646.             var f = 0;
  8647.             var g = w.max_size * 2;
  8648.             if (g < d) g = d;
  8649.             if (g < 8192) g = 8192;
  8650.             e = malloc(g, uint8_t);
  8651.             if (e == null) {
  8652.                 return 0
  8653.             }
  8654.             if ((w.size) > 0) {
  8655.                 memcpy(e, f, w.mem, 0, w.size)
  8656.             }
  8657.             w.mem = '';
  8658.             w.mem = e;
  8659.             w.max_size = g
  8660.         }
  8661.         if (b) {
  8662.             memcpy((w.mem), +(w.size), a, 0, b);
  8663.             w.size += b
  8664.         }
  8665.         return 1
  8666.     }
  8667.     var dY = 16;
  8668.  
  8669.     function clip_uv(v) {
  8670.         v = (v + (257 << (dY + 2 - 1))) >> (dY + 2);
  8671.         return ((v & ~0xff) == 0) ? v : (v < 0) ? 0 : 255
  8672.     }
  8673.     function rgb_to_y(r, g, b) {
  8674.         var a = (1 << (dY - 1)) + (16 << dY);
  8675.         var c = 16839 * r + 33059 * g + 6420 * b;
  8676.         return (c + a) >> dY
  8677.     }
  8678.     function rgb_to_u(r, g, b) {
  8679.         return clip_uv(-9719 * r - 19081 * g + 28800 * b)
  8680.     }
  8681.     function rgb_to_v(r, g, b) {
  8682.         return clip_uv(+28800 * r - 24116 * g - 4684 * b)
  8683.     }
  8684.     function MakeGray(a) {
  8685.         var y;
  8686.         var b = (a.width + 1) >> 1;
  8687.         for (y = 0; y < ((a.height + 1) >> 1); ++y) {
  8688.             memset_(a.u, a.u_off + y * a.uv_stride, 128, b);
  8689.             memset_(a.v, a.v_off + y * a.uv_stride, 128, b)
  8690.         }
  8691.     }
  8692.     function Import(h, i, j, k, l, m) {
  8693.         var n = h.colorspace & WEBP_CSP_UV_MASK;
  8694.         var x, y = int;
  8695.         var o = i;
  8696.         var p = +(l ? 2 : 0);
  8697.         var q = i;
  8698.         var s = +1;
  8699.         var t = i;
  8700.         var u = +(l ? 0 : 2);
  8701.         var v = h.width;
  8702.         var w = h.height;
  8703.  
  8704.         function SUM4(a, b) {
  8705.             return (a[b + 0] + a[b + k] + a[b + j] + a[b + j + k])
  8706.         }
  8707.         function SUM2H(a, b) {
  8708.             return (2 * a[b + 0] + 2 * a[b + k])
  8709.         }
  8710.         function SUM2V(a, b) {
  8711.             return (2 * a[b + 0] + 2 * a[b + j])
  8712.         }
  8713.         function SUM1(a, b) {
  8714.             return (4 * a[b + 0])
  8715.         }
  8716.         function RGB_TO_UV(x, y, a) {
  8717.             var c = (2 * (k * (x) + (y) * j));
  8718.             var d = (x) + (y) * h.uv_stride;
  8719.             var r = a(o, p + c);
  8720.             var g = a(q, s + c);
  8721.             var b = a(t, u + c);
  8722.             h.u[h.u_off + d] = rgb_to_u(r, g, b);
  8723.             h.v[h.v_off + d] = rgb_to_v(r, g, b)
  8724.         }
  8725.         function RGB_TO_UV0(a, c, y, d) {
  8726.             var e = (k * (a) + (y) * j);
  8727.             var f = (c) + (y) * h.uv0_stride;
  8728.             var r = d(o, p + e);
  8729.             var g = d(q, s + e);
  8730.             var b = d(t, u + e);
  8731.             h.u0[h.u0_off + f] = rgb_to_u(r, g, b);
  8732.             h.v0[h.v0_off + f] = rgb_to_v(r, g, b)
  8733.         }
  8734.         for (y = 0; y < w; ++y) {
  8735.             for (x = 0; x < v; ++x) {
  8736.                 var z = k * x + y * j;
  8737.                 h.y[h.y_off + x + y * h.y_stride] = rgb_to_y(o[p + z], q[s + z], t[u + z])
  8738.             }
  8739.         }
  8740.         if (n != WEBP_YUV400) {
  8741.             for (y = 0; y < (w >> 1); ++y) {
  8742.                 for (x = 0; x < (v >> 1); ++x) {
  8743.                     RGB_TO_UV(x, y, SUM4)
  8744.                 }
  8745.                 if (h.width & 1) {
  8746.                     RGB_TO_UV(x, y, SUM2V)
  8747.                 }
  8748.             }
  8749.             if (w & 1) {
  8750.                 for (x = 0; x < (v >> 1); ++x) {
  8751.                     RGB_TO_UV(x, y, SUM2H)
  8752.                 }
  8753.                 if (v & 1) {
  8754.                     RGB_TO_UV(x, y, SUM1)
  8755.                 }
  8756.             }
  8757.             if (n == WEBP_YUV422) {
  8758.                 for (y = 0; y < w; ++y) {
  8759.                     for (x = 0; x < (v >> 1); ++x) {
  8760.                         RGB_TO_UV0(2 * x, x, y, SUM2H)
  8761.                     }
  8762.                     if (v & 1) {
  8763.                         RGB_TO_UV0(2 * x, x, y, SUM1)
  8764.                     }
  8765.                 }
  8766.             } else if (n == WEBP_YUV444) {
  8767.                 for (y = 0; y < w; ++y) {
  8768.                     for (x = 0; x < v; ++x) {
  8769.                         RGB_TO_UV0(x, x, y, SUM1)
  8770.                     }
  8771.                 }
  8772.             }
  8773.         } else {
  8774.             MakeGray(h)
  8775.         }
  8776.         if (m) {
  8777.             var A = i;
  8778.             var B = +3;
  8779.             assert(k >= 4);
  8780.             for (y = 0; y < w; ++y) {
  8781.                 for (x = 0; x < v; ++x) {
  8782.                     h.a[h.a_off + x + y * h.a_stride] = A[B + k * x + y * j]
  8783.                 }
  8784.             }
  8785.         }
  8786.         return 1
  8787.     }
  8788.     function WebPPictureImportRGB(a, b, c) {
  8789.         a.colorspace &= ~WEBP_CSP_ALPHA_BIT;
  8790.         if (!WebPPictureAlloc(a)) return 0;
  8791.         return Import(a, b, c, 3, 0, 0)
  8792.     }
  8793.     function WebPPictureImportBGR(a, b, c) {
  8794.         a.colorspace &= ~WEBP_CSP_ALPHA_BIT;
  8795.         if (!WebPPictureAlloc(a)) return 0;
  8796.         return Import(a, b, c, 3, 1, 0)
  8797.     }
  8798.     function WebPPictureImportRGBA(a, b, c) {
  8799.         a.colorspace |= WEBP_CSP_ALPHA_BIT;
  8800.         if (!WebPPictureAlloc(a)) return 0;
  8801.         return Import(a, b, c, 4, 0, 1)
  8802.     }
  8803.     function WebPPictureImportBGRA(a, b, c) {
  8804.         a.colorspace |= WEBP_CSP_ALPHA_BIT;
  8805.         if (!WebPPictureAlloc(a)) return 0;
  8806.         return Import(a, b, c, 4, 1, 1)
  8807.     }
  8808.     var dZ, pic_tmp;
  8809.  
  8810.     function Encode(e, f, g, h, j, k, l) {
  8811.         var m = 0;
  8812.         var n = newObjectIt(V);
  8813.         var o = newObjectIt(O);
  8814.         var p = newObjectIt(dX);
  8815.         var q = int;
  8816.         n.extra_info_type = ea.extra_info_type ? ea.extra_info_type : 0;
  8817.         if (!WebPConfigPreset(o, P.WEBP_PRESET_DEFAULT, k) || !WebPPictureInit(n)) {
  8818.             return 0
  8819.         }
  8820.         n.width = f;
  8821.         n.height = g;
  8822.         n.writer = function (a, b, c, d) {
  8823.             return WebPMemoryWrite(a, b, c, d)
  8824.         };
  8825.         n.custom_ptr = p;
  8826.         p.mem = l.output;
  8827.         p.size = m;
  8828.         InitMemoryWriter(p);
  8829.         q = j(n, e, h) && WebPEncode(o, n);
  8830.         if (q) pic_stats = newObjectIt(n.stats);
  8831.         else pic_stats = null;
  8832.         if (q) pic_tmp = newObjectIt(n);
  8833.         else pic_tmp = null;
  8834.         WebPPictureFree(n);
  8835.         if (!q) {
  8836.             l = '';
  8837.             l = null;
  8838.             return 0
  8839.         }
  8840.         var r = new Array();
  8841.         for (var i = 0; i < p.size; ++i) r.push(String.fromCharCode(p.mem[i]));
  8842.         r = r.join("");
  8843.         l.output = r;
  8844.         m = p.size;
  8845.         return m
  8846.     }
  8847.     this.WebPEncodeRGB = function (a, w, h, b, q, c) {
  8848.         return Encode(a, w, h, b, WebPPictureImportRGB, q, c)
  8849.     };
  8850.     this.WebPEncodeBGR = function (a, w, h, b, q, c) {
  8851.         return Encode(a, w, h, b, WebPPictureImportBGR, q, c)
  8852.     };
  8853.     this.WebPEncodeRGBA = function (a, w, h, b, q, c) {
  8854.         return Encode(a, w, h, b, WebPPictureImportRGBA, q, c)
  8855.     };
  8856.     this.WebPEncodeBGRA = function (a, w, h, b, q, c) {
  8857.         return Encode(a, w, h, b, WebPPictureImportBGRA, q, c)
  8858.     };
  8859.     var ea = null;
  8860.     this.WebPEncodeConfig = function (a) {
  8861.         ea = a
  8862.     };
  8863.  
  8864.     function AllocExtraInfo(a) {
  8865.         var b = parseInt((a.width + 15) / 16);
  8866.         var c = parseInt((a.height + 15) / 16);
  8867.         a.extra_info = malloc(b * c * sizeof(a.extra_info), uint8_t)
  8868.     }
  8869.     this.ReturnExtraInfo = function () {
  8870.         function l(b, l) {
  8871.             b = b + '';
  8872.             var a = '',
  8873.                 i;
  8874.             var c = l - (typeof b.length !== 'undefined' ? b.length : 1);
  8875.             c = l < 0 ? 0 : c;
  8876.             for (i = 0; i < c; ++i) a += ' ';
  8877.             return a + b
  8878.         };
  8879.  
  8880.         function PrintByteCount(a, b, c) {
  8881.             var s, str = '';
  8882.             var d = 0;
  8883.             for (s = 0; s < 4; ++s) {
  8884.                 str += "| " + l(a[s], 7) + " ";
  8885.                 d += a[s];
  8886.                 if (c) c[s] += a[s]
  8887.             }
  8888.             return str + "| " + l(d, 7) + "  (" + ((100. * d / b).toFixed(1)) + "%)\n"
  8889.         };
  8890.  
  8891.         function PrintPercents(a, b) {
  8892.             var s, str = '';
  8893.             for (s = 0; s < 4; ++s) {
  8894.                 str += "|     " + l(parseInt(100 * a[s] / b), 3) + "%"
  8895.             }
  8896.             return str + "| " + l(b, 7) + "\n"
  8897.         };
  8898.  
  8899.         function PrintValues(a) {
  8900.             var s, str = '';
  8901.             for (s = 0; s < 4; ++s) {
  8902.                 str += "| " + l(a[s], 7) + " "
  8903.             }
  8904.             return str + "|\n"
  8905.         };
  8906.         if (!pic_stats) return '';
  8907.         var e = pic_stats;
  8908.         var f = e.block_count[0];
  8909.         var g = e.block_count[1];
  8910.         var h = e.block_count[2];
  8911.         var j = f + g;
  8912.         str = "" + l(e.coded_size, 7) + " bytes Y-U-V-All-PSNR " + (e.PSNR[0].toFixed(2)) + " " + (e.PSNR[1].toFixed(2)) + " " + (e.PSNR[2].toFixed(2)) + "   " + (e.PSNR[3].toFixed(2)) + " dB\n";
  8913.         if (j > 0) {
  8914.             var k = new Array(0, 0, 0, 0);
  8915.             str += "block count:  intra4: " + f + "\n" + "              intra16: " + g + "  (-> " + ((100. * g / j).toFixed(2)) + "%)\n" + "              skipped block: " + h + " (" + ((100. * h / j).toFixed(2)) + "%)\n" + "bytes used:  header:         " + l(e.header_bytes[0], 6) + "  (" + ((100. * e.header_bytes[0] / e.coded_size).toFixed(1)) + "%)\n" + "             mode-partition: " + l(e.header_bytes[1], 6) + "  (" + ((100. * e.header_bytes[1] / e.coded_size).toFixed(1)) + "%)\n" + " Residuals bytes  |segment 1|segment 2|segment 3|segment 4|  total\n" + "  intra4-coeffs:  " + PrintByteCount(e.residual_bytes[0], e.coded_size, k) + "" + " intra16-coeffs:  " + PrintByteCount(e.residual_bytes[1], e.coded_size, k) + "" + "  chroma coeffs:  " + PrintByteCount(e.residual_bytes[2], e.coded_size, k) + "" + "    macroblocks:  " + PrintPercents(e.segment_size, j) + "" + "      quantizer:  " + PrintValues(e.segment_quant) + "" + "   filter level:  " + PrintValues(e.segment_level) + "" + "------------------+---------+---------+---------+---------+-----------------\n" + " segments total:  " + PrintByteCount(k, e.coded_size, null) + ""
  8916.         }
  8917.         str += "";
  8918.         if (pic_tmp.extra_info) {
  8919.             var m = parseInt((pic_tmp.width + 15) / 16);
  8920.             var n = parseInt((pic_tmp.height + 15) / 16);
  8921.             var o = pic_tmp.extra_info_type;
  8922.             var x, y;
  8923.             for (y = 0; y < n; ++y) {
  8924.                 for (x = 0; x < m; ++x) {
  8925.                     var c = pic_tmp.extra_info[x + y * m];
  8926.                     if (o == 1) {
  8927.                         var p = "+.";
  8928.                         str += p[c % 2]
  8929.                     } else if (o == 2) {
  8930.                         var q = ".-*X";
  8931.                         str += q[c % 4]
  8932.                     } else if (o == 3) {
  8933.                         str += l(c, 2) + " "
  8934.                     } else if (o == 6 || o == 7) {
  8935.                         str += l(c, 3) + " "
  8936.                     } else {
  8937.                         str += "0x" + (c < 16 ? "0" : "") + c.toString(16) + " "
  8938.                     }
  8939.                 }
  8940.                 str += "\n"
  8941.             }
  8942.         }
  8943.         return str
  8944.     }
  8945. }
  8946.  
  8947.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement