//-------------------------------------------------------------------------------------------------------
// 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 = -31854;
b = 14449;
c = -13652;
d = -28067;
e = 12551;
f = 18046;
g = -38430;
h = 23337;
obj0.a = 2983;
obj0.b = -41045;
obj0.c = 63275;
obj0.d = -38128;
obj0.e = -60447;
ary[0] = 43145;
ary[1] = -43125;
ary[100] = -28151;
c = ((((! e) & (d | f)) & ((-39471 * 47485) * d)) * (c * obj0.a));
if((((d ^ obj0.c) ^ -50147) > ((b & (17271 ^ obj0.d)) - ((f >= h) | (-51271 | -31961))))) {
  d = (b++ );
  if(((-27412 | (! c)) < (((-19033 * obj0.a) | obj0.a) & -58780))) {
  } else {
    if(((obj0.a + (obj0.a ^ (obj0.b & obj0.c))) <= (b & f))) {
    } else {
    }
    d = (((h * (15388 + f)) | (obj0.b & (obj0.d - 45426))) >= (((obj0.e * obj0.c) > (+ c)) * ((e == 27108) ? (obj0.b - 51619) : (-35278 - b))));
  }
} else {
  obj0.d = (+ (b - obj0.b));
  obj0.a = obj0.a;
}
a = d;
if(((e * (+ a)) >= ((obj0.e | (19275 & 60536)) - obj0.e))) {
  d = g;
  if(((-43809 | ((7778 * -51873) & obj0.e)) >= ((6278 & (d == -26591)) & (+ 65486)))) {
    c = ((((- obj0.a) ^ (g * h)) & ((f < 4014) + h)) == ((c & (+ 17258)) * ((42705 <= d) ? obj0.a : (obj0.a ^ -15678))));
    obj0.d = (((g++ ) + obj0.b) + (obj0.d - d));
    if((((c - obj0.b) * 30613) != ((g != (f & 30844)) * ((-25264 ? -45762 : 32891) * (50453 + 5891))))) {
      c = ((h + (c | (a ? d : obj0.a))) - (((- obj0.c) - (obj0.d - obj0.c)) ^ ((-4875 == -47205) ^ (obj0.b * obj0.b))));
    } else {
    }
  } else {
    if(((((e & d) & (c ^ obj0.a)) & (+ g)) == (((22168 < a) - -2200) ^ ((! obj0.d) | 61775)))) {
    } else {
    }
    c = obj0.d;
  }
} else {
  h = g;
  b = h;
}
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');
})();
