//-------------------------------------------------------------------------------------------------------
// 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 = -8081;
b = -25457;
c = 63832;
d = 21646;
e = -37124;
f = -9927;
g = -43474;
h = 56086;
obj0.a = 44436;
obj0.b = -48856;
obj0.c = -52422;
obj0.d = -54487;
obj0.e = -31239;
ary[0] = 27278;
ary[1] = 2696;
ary[100] = 42772;
if((((g | obj0.c) | h) == ((b | b) - ((45856 - -58456) | (-65416 ^ -61436))))) {
} else {
}
if((((obj0.d | (a ? obj0.d : -8906)) | ((obj0.e | -62809) > (-39204 - -50554))) != (((b ? 62063 : 1368) & g) + obj0.b))) {
} else {
  if((((! -38820) | -46409) != ((- d) - ((obj0.e + 8525) - (- -55224))))) {
    if((((c & e) + obj0.c) > ((d & (h | 44502)) ^ (- (-29629 ^ obj0.d))))) {
      f = c;
      c = ((((c * -57070) - obj0.d) | (-6758 - h)) ^ (-33370 ^ obj0.a));
    } else {
      f = obj0.d;
      a = f;
    }
    obj0.c = obj0.b;
  } else {
    obj0.b = (((b == obj0.c) ^ obj0.b) * ((++ obj0.b) - e));
    obj0.b = obj0.d;
  }
  d = (((+ (a ? 20302 : -47561)) + ((e ^ a) <= g)) * (f - a));
  if((((obj0.d > -4733) & ((! 18938) & (341 & 37879))) >= ((-18822 ^ (27327 * c)) & e))) {
    if(((((c | 3284) + (-44835 + -16343)) * ((-14780 | f) >= (-47605 >= 51968))) < (((-48483 == g) ? (37822 | d) : h) | (obj0.d * obj0.e)))) {
      b = 56271;
    } else {
      obj0.c = ((obj0.b - ((h + 54508) != (g & -39229))) ^ (-63810 ^ ((obj0.e > e) ? (-18750 | obj0.b) : (g + obj0.c))));
    }
    g = ((((+ c) - d) - g) & ((obj0.a * (f | 2957)) * (h > (20034 + g))));
    h = (((f ^ (f < obj0.e)) - obj0.a) & (((21947 - 57146) > obj0.c) & obj0.d));
  } else {
    if((((e * (e != obj0.d)) ^ 2420) <= (f & c))) {
      b = ((obj0.a & (d ^ obj0.a)) & ((+ (-52375 ^ obj0.a)) ^ obj0.b));
    } else {
      b = ((obj0.b | (obj0.b - -15986)) * (e + obj0.b));
    }
  }
}
if(((((f++ ) * h) - (-489 ^ (d == -4710))) >= (f | (e * (21628 ? -5116 : b))))) {
  if((((! (32515 ^ a)) ^ ((obj0.e ^ -15844) > f)) > (c & ((obj0.c + h) ^ (-3734 != e))))) {
    obj0.e = ((f & (obj0.b ^ (-50354 - obj0.e))) + ((! (obj0.e ? f : 18915)) ^ 54488));
    if((((-14494 ^ obj0.a) & ((g++ ) | b)) < (((-17901 ^ 10051) ^ (b++ )) * b))) {
    } else {
      b = (((obj0.a > d) * (obj0.c ^ (-46991 * a))) - ((- d) | c));
      g = (((+ (19933 * -40195)) & h) | ((obj0.d ^ (d | a)) ^ c));
      c = a;
    }
  } else {
    if(((obj0.d + obj0.e) >= ((! (obj0.b ? a : -21355)) + e))) {
      f = ((((h != 30708) + (g >= -5552)) ^ d) == (((obj0.a > -48841) ? (36727 + -8880) : (obj0.c | g)) * ((! obj0.e) & (-30098 ? -40801 : 13858))));
      obj0.d = ((c * ((obj0.d ^ obj0.d) * (b * 49217))) + (a * ((+ 14501) ^ (a & obj0.c))));
      d = b;
    } else {
      obj0.d = (((obj0.d | (obj0.e ^ obj0.e)) ^ (! (obj0.e ? -25581 : -4775))) & (a - d));
    }
  }
} else {
  if(((g + ((obj0.e ? 37860 : obj0.a) & (23074 & g))) > ((- obj0.a) - d))) {
    if(((((h <= h) ? (d - obj0.b) : (-24614 + -44675)) + (obj0.a & g)) > (-56616 + (- (-23595 - obj0.a))))) {
      b = -4588;
      a = obj0.d;
    } else {
    }
    f = ((-6720 ^ obj0.b) ? ((! 15269) ^ obj0.e) : ((! (b ^ 8886)) * (++ d)));
    if(((c - -47687) != (((-15118 & f) ^ (63840 + -193)) * g))) {
      d = obj0.a;
    } else {
    }
  } else {
    if(((((d - h) != (43252 | -41416)) + (! (obj0.a != obj0.c))) != (((obj0.c + -54980) | (obj0.d == f)) & (obj0.e + (-24989 | -16258))))) {
      f = (+ (((37692 - 53312) + (-19915 ^ 21779)) & ((a >= b) > (38315 | c))));
    } else {
    }
    if(((f - ((- 9434) & obj0.c)) <= ((-12829 - (-32358 ^ obj0.b)) ^ c))) {
      obj0.e = obj0.b;
      f = ((obj0.a | (c + (g - d))) >= ((+ 18962) | obj0.e));
      c = obj0.e;
    } else {
      e = ((e & obj0.b) - ((b == (e - b)) | (++ obj0.a)));
      e = ((-46684 ^ (+ (-18471 - obj0.d))) < ((g >= (c & f)) * obj0.b));
      c = (((obj0.e & (d & 20433)) - obj0.e) != ((obj0.b + (b++ )) + (24473 | g)));
    }
  }
  a = h;
  if((((g ^ (! 12231)) & c) != (((5217 > g) ? obj0.a : obj0.b) | obj0.b))) {
  } else {
  }
}
obj0.e = ((obj0.e | f) & (((f++ ) - obj0.c) + (obj0.c ^ obj0.e)));
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');
})();
