daily pastebin goal
64%
SHARE
TWEET

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

a guest Nov 19th, 2011 1,031 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[