//-------------------------------------------------------------------------------------------------------
// 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 = -62290;
b = 50411;
c = 28074;
d = 1056;
e = -11660;
f = 60788;
g = -46581;
h = -49558;
obj0.a = -16847;
obj0.b = -28700;
obj0.c = -5272;
obj0.d = -62810;
obj0.e = -1242;
ary[0] = 10913;
ary[1] = 11723;
ary[100] = -6439;
if(((((48816 + obj0.e) & (+ f)) & ((-20547 & e) * (obj0.b | obj0.c))) <= (((a ? -53618 : a) * (obj0.d + -26372)) | (+ (obj0.a + g))))) {
  if((((obj0.c ^ (obj0.d | c)) + ((b | -37570) * (obj0.a - 46726))) <= (obj0.b - a))) {
    c = obj0.c;
    if(((25890 + obj0.c) > (c * (- obj0.c)))) {
      h = 49690;
      obj0.c = ((((15971 & h) - (-17360 ^ 45726)) * -42356) | (((20031 >= -16555) & b) + (g * (27969 & -53292))));
      b = ((((obj0.d < a) ? (g ? obj0.b : 30717) : (obj0.d | 8121)) | ((obj0.d & 56296) >= -47022)) - (((-61364 != 38521) ? (-35533 ^ obj0.b) : (52018 + 37562)) & ((22677 > -46909) - (+ -43163))));
    } else {
      obj0.d = (g++ );
      obj0.c = a;
      obj0.c = ((e * d) | (g - d));
    }
    if((((b * d) ^ ((g + 44485) * (obj0.c ? g : -8233))) == (((-1605 | -47150) + obj0.e) * ((e ? h : g) == (++ obj0.b))))) {
      d = f;
      c = (((h - (e ^ g)) ^ 46555) ? (c - ((21180 | -54269) - obj0.d)) : (obj0.a - 63510));
    } else {
      d = ((obj0.e + ((b < -45899) | -41640)) & (((-27141 ? obj0.a : h) - f) - f));
      obj0.c = -30322;
      h = ((d - (obj0.d - (-30680 & g))) & ((+ (-64111 & e)) * obj0.a));
    }
  } else {
  }
  e = ((c | -27318) - (obj0.e + b));
} else {
  if(((c & 41129) >= (56654 + a))) {
    if((((f + -43974) * (obj0.b & (a - obj0.c))) != ((obj0.c * (e ? f : obj0.e)) - d))) {
    } else {
    }
  } else {
  }
  if(((obj0.d & (c != (! -7064))) < ((- (60445 * h)) + a))) {
    if(((e ^ ((obj0.e & b) - -37800)) != ((g == obj0.e) & (d | (+ -12493))))) {
      g = (((d & c) - -27427) - (((c ? c : -56573) < a) | ((e + obj0.e) - (36881 ^ -1749))));
    } else {
      obj0.d = b;
      a = -212;
    }
    if(((((45083 <= 16468) * 31159) * ((-52749 >= 17108) ? obj0.c : (9089 >= 7497))) < (obj0.e & (obj0.b + obj0.c)))) {
    } else {
    }
  } else {
    if((((a & h) - (obj0.b > 20068)) >= (15202 + (-4263 | b)))) {
    } else {
      h = ((-49509 + ((g > 61441) ? c : (+ 59452))) < ((obj0.e > h) & ((a ^ f) != (20636 & -5069))));
      g = c;
      e = ((a + 50048) & (a ^ g));
    }
  }
}
obj0.e = ((obj0.b - a) - (((a - -10695) + -365) * ((! 23871) + obj0.c)));
if((((- a) - (-29508 & 54877)) != ((obj0.e | -825) + ((obj0.d == -56294) ? (d <= -17973) : d)))) {
  if((((d++ ) & (g ^ (148 ? -38750 : -29664))) != (((40250 + obj0.e) & (+ -24096)) + ((h - f) + (f + b))))) {
    if(((h ^ (b - (-3833 - e))) == (((+ obj0.e) * (-26843 * d)) * b))) {
      g = f;
      f = f;
      h = ((obj0.c + (- (e + 2767))) > (((f - obj0.c) - (-63584 != 34222)) * (f ^ (-6407 | obj0.e))));
    } else {
    }
    obj0.b = ((e ^ a) ? (a - ((g | a) - (-42100 | -16267))) : (((c ^ d) + obj0.c) & (h + 46109)));
    if((((-15739 + (-32293 & obj0.e)) | ((c - g) & (! -487))) != ((63539 * obj0.c) - obj0.b))) {
      obj0.e = ((((29148 ? 64964 : b) - (obj0.e * e)) + (obj0.e & -36385)) - (((g != a) ? (50033 ^ obj0.d) : (g | 61411)) - obj0.d));
      a = d;
      a = ((((51888 & g) - obj0.b) ^ g) ^ (((-60974 & 54594) ^ (! d)) * (! d)));
    } else {
      a = ((h & obj0.c) | (((- b) + (16108 & 20873)) + ((38073 * 39259) ^ (h + 24380))));
      c = -43222;
      obj0.d = obj0.d;
    }
  } else {
    if((((obj0.b | obj0.e) ^ b) <= ((obj0.b ^ (obj0.b | d)) + a))) {
      b = ((d * ((28655 < -55686) ? obj0.a : (-54914 + -33492))) == (f - ((52818 <= 20375) ? obj0.d : (20966 * -13737))));
      c = ((obj0.c & 63166) - (g & (obj0.a - obj0.b)));
    } else {
      d = c;
      obj0.d = ((((d <= 55188) ? (c >= obj0.b) : d) & (d != (obj0.d ^ d))) | (((e ? b : -20838) ^ (b - -44973)) | ((e + -41963) * (36927 - h))));
      obj0.e = ((((h >= -15984) ? (a ? c : 45656) : (f > obj0.b)) * (g | d)) + ((-16228 & 25349) | ((a + -62598) ^ (obj0.d | b))));
    }
    d = c;
    if((((++ c) ^ ((+ obj0.c) & (b + -13092))) == (f | d))) {
      f = f;
      e = h;
      obj0.b = obj0.a;
    } else {
      obj0.b = (e++ );
      f = ((f - ((+ obj0.e) ^ obj0.b)) * (-7302 * obj0.e));
      f = (((c - obj0.b) - (b ^ (+ -37926))) ? ((d + obj0.d) & d) : (f - (e != (obj0.e ^ e))));
    }
  }
  obj0.c = d;
} else {
  a = ((((b & obj0.a) + (-1349 <= b)) - -63889) ? (((h ^ g) + (a ? obj0.c : obj0.a)) | d) : (((51599 & d) - h) ^ ((h | 21837) <= b)));
}
c = a;
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');
})();
