//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -34298;
b = 13789;
c = -37408;
d = 46308;
e = -35625;
f = 58654;
g = -21690;
h = -59839;
obj0.a = 6579;
obj0.b = -38620;
obj0.c = 55181;
obj0.d = -41762;
obj0.e = -57542;
ary[0] = 48248;
ary[1] = 27552;
ary[100] = 42711;
if((((a < (obj0.a ? -56709 : 27807)) + ((a <= 22656) ? (obj0.d ? 13079 : 32895) : (-57450 ? g : f))) <= (obj0.d * ((29330 + -63585) >= (g <= obj0.c))))) {
} else {
  if(((obj0.d + (c & (30383 | -52662))) < ((- (obj0.d != -59981)) | c))) {
    if(((((63765 + c) - h) | ((-58354 | obj0.b) & a)) <= (((54839 & h) ^ e) ^ h))) {
    } else {
      obj0.d = ((((25544 ? 25363 : h) - (! -34884)) * g) ? (d - h) : ((h++ ) & 30233));
    }
    obj0.c = c;
  } else {
    b = obj0.c;
    if(((41022 * -37807) == ((obj0.a - (-1446 * obj0.b)) - ((-34458 - obj0.b) ^ (! 32151))))) {
      obj0.d = a;
    } else {
      obj0.c = ((b - ((b ? d : obj0.d) ^ (g + 3189))) * (((obj0.d < -56264) ? (e ? a : g) : obj0.c) * obj0.d));
    }
    if(((34410 * (obj0.c | (obj0.a < 18442))) >= ((- (65191 + -23766)) + ((39704 != a) ? -51562 : (31479 ? 2113 : 17505))))) {
      f = g;
    } else {
      d = ((obj0.a | obj0.d) <= (((-33829 * -16553) + (obj0.e + obj0.a)) - d));
      f = ((((- obj0.d) | c) & obj0.b) ? ((e * (+ 21059)) * -37848) : (((26370 < 14737) - obj0.d) | obj0.a));
    }
  }
  if(((((obj0.d & 29226) - g) - -39637) > (((g == -22329) ^ g) ^ d))) {
    if((((obj0.b + obj0.d) - ((f & -52239) * h)) > (-12051 | (d + (a ^ 33406))))) {
      h = ((obj0.b * (obj0.b + (obj0.d ^ -30550))) <= ((61618 & (++ obj0.b)) + (++ obj0.a)));
      d = d;
      obj0.a = (++ e);
    } else {
      obj0.a = ((((+ b) < (29050 ? 8545 : -4545)) + e) - ((obj0.d * (-28713 ? -50704 : e)) + obj0.a));
      g = (((obj0.a - (f * -53732)) - a) > (((-37176 == 58942) ? (obj0.b ^ b) : (h > 63320)) | (obj0.c - (obj0.a * d))));
    }
    d = obj0.c;
  } else {
    a = ((g ^ f) + (h * obj0.c));
  }
  h = obj0.b;
}
obj0.a = e;
obj0.c = (((e ^ 18590) + (c + (32049 & obj0.c))) - (e + (b & (- obj0.b))));
h = ((((obj0.c * obj0.b) * (obj0.a & obj0.a)) | obj0.b) + ((obj0.d < e) - obj0.b));
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
