/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['uglify/consolidator.js']) {
  _$jscoverage['uglify/consolidator.js'] = [];
  _$jscoverage['uglify/consolidator.js'][91] = 0;
  _$jscoverage['uglify/consolidator.js'][92] = 0;
  _$jscoverage['uglify/consolidator.js'][98] = 0;
  _$jscoverage['uglify/consolidator.js'][110] = 0;
  _$jscoverage['uglify/consolidator.js'][116] = 0;
  _$jscoverage['uglify/consolidator.js'][117] = 0;
  _$jscoverage['uglify/consolidator.js'][118] = 0;
  _$jscoverage['uglify/consolidator.js'][119] = 0;
  _$jscoverage['uglify/consolidator.js'][125] = 0;
  _$jscoverage['uglify/consolidator.js'][131] = 0;
  _$jscoverage['uglify/consolidator.js'][146] = 0;
  _$jscoverage['uglify/consolidator.js'][152] = 0;
  _$jscoverage['uglify/consolidator.js'][168] = 0;
  _$jscoverage['uglify/consolidator.js'][176] = 0;
  _$jscoverage['uglify/consolidator.js'][322] = 0;
  _$jscoverage['uglify/consolidator.js'][323] = 0;
  _$jscoverage['uglify/consolidator.js'][385] = 0;
  _$jscoverage['uglify/consolidator.js'][386] = 0;
  _$jscoverage['uglify/consolidator.js'][387] = 0;
  _$jscoverage['uglify/consolidator.js'][402] = 0;
  _$jscoverage['uglify/consolidator.js'][405] = 0;
  _$jscoverage['uglify/consolidator.js'][419] = 0;
  _$jscoverage['uglify/consolidator.js'][420] = 0;
  _$jscoverage['uglify/consolidator.js'][422] = 0;
  _$jscoverage['uglify/consolidator.js'][431] = 0;
  _$jscoverage['uglify/consolidator.js'][432] = 0;
  _$jscoverage['uglify/consolidator.js'][436] = 0;
  _$jscoverage['uglify/consolidator.js'][437] = 0;
  _$jscoverage['uglify/consolidator.js'][440] = 0;
  _$jscoverage['uglify/consolidator.js'][451] = 0;
  _$jscoverage['uglify/consolidator.js'][460] = 0;
  _$jscoverage['uglify/consolidator.js'][461] = 0;
  _$jscoverage['uglify/consolidator.js'][477] = 0;
  _$jscoverage['uglify/consolidator.js'][478] = 0;
  _$jscoverage['uglify/consolidator.js'][490] = 0;
  _$jscoverage['uglify/consolidator.js'][491] = 0;
  _$jscoverage['uglify/consolidator.js'][506] = 0;
  _$jscoverage['uglify/consolidator.js'][507] = 0;
  _$jscoverage['uglify/consolidator.js'][527] = 0;
  _$jscoverage['uglify/consolidator.js'][528] = 0;
  _$jscoverage['uglify/consolidator.js'][539] = 0;
  _$jscoverage['uglify/consolidator.js'][540] = 0;
  _$jscoverage['uglify/consolidator.js'][584] = 0;
  _$jscoverage['uglify/consolidator.js'][585] = 0;
  _$jscoverage['uglify/consolidator.js'][588] = 0;
  _$jscoverage['uglify/consolidator.js'][596] = 0;
  _$jscoverage['uglify/consolidator.js'][598] = 0;
  _$jscoverage['uglify/consolidator.js'][607] = 0;
  _$jscoverage['uglify/consolidator.js'][608] = 0;
  _$jscoverage['uglify/consolidator.js'][617] = 0;
  _$jscoverage['uglify/consolidator.js'][627] = 0;
  _$jscoverage['uglify/consolidator.js'][628] = 0;
  _$jscoverage['uglify/consolidator.js'][629] = 0;
  _$jscoverage['uglify/consolidator.js'][630] = 0;
  _$jscoverage['uglify/consolidator.js'][633] = 0;
  _$jscoverage['uglify/consolidator.js'][649] = 0;
  _$jscoverage['uglify/consolidator.js'][692] = 0;
  _$jscoverage['uglify/consolidator.js'][694] = 0;
  _$jscoverage['uglify/consolidator.js'][718] = 0;
  _$jscoverage['uglify/consolidator.js'][720] = 0;
  _$jscoverage['uglify/consolidator.js'][745] = 0;
  _$jscoverage['uglify/consolidator.js'][748] = 0;
  _$jscoverage['uglify/consolidator.js'][797] = 0;
  _$jscoverage['uglify/consolidator.js'][798] = 0;
  _$jscoverage['uglify/consolidator.js'][799] = 0;
  _$jscoverage['uglify/consolidator.js'][803] = 0;
  _$jscoverage['uglify/consolidator.js'][824] = 0;
  _$jscoverage['uglify/consolidator.js'][825] = 0;
  _$jscoverage['uglify/consolidator.js'][827] = 0;
  _$jscoverage['uglify/consolidator.js'][829] = 0;
  _$jscoverage['uglify/consolidator.js'][834] = 0;
  _$jscoverage['uglify/consolidator.js'][853] = 0;
  _$jscoverage['uglify/consolidator.js'][854] = 0;
  _$jscoverage['uglify/consolidator.js'][859] = 0;
  _$jscoverage['uglify/consolidator.js'][871] = 0;
  _$jscoverage['uglify/consolidator.js'][883] = 0;
  _$jscoverage['uglify/consolidator.js'][884] = 0;
  _$jscoverage['uglify/consolidator.js'][929] = 0;
  _$jscoverage['uglify/consolidator.js'][933] = 0;
  _$jscoverage['uglify/consolidator.js'][943] = 0;
  _$jscoverage['uglify/consolidator.js'][980] = 0;
  _$jscoverage['uglify/consolidator.js'][982] = 0;
  _$jscoverage['uglify/consolidator.js'][983] = 0;
  _$jscoverage['uglify/consolidator.js'][984] = 0;
  _$jscoverage['uglify/consolidator.js'][988] = 0;
  _$jscoverage['uglify/consolidator.js'][990] = 0;
  _$jscoverage['uglify/consolidator.js'][992] = 0;
  _$jscoverage['uglify/consolidator.js'][996] = 0;
  _$jscoverage['uglify/consolidator.js'][1003] = 0;
  _$jscoverage['uglify/consolidator.js'][1007] = 0;
  _$jscoverage['uglify/consolidator.js'][1010] = 0;
  _$jscoverage['uglify/consolidator.js'][1018] = 0;
  _$jscoverage['uglify/consolidator.js'][1021] = 0;
  _$jscoverage['uglify/consolidator.js'][1028] = 0;
  _$jscoverage['uglify/consolidator.js'][1030] = 0;
  _$jscoverage['uglify/consolidator.js'][1033] = 0;
  _$jscoverage['uglify/consolidator.js'][1042] = 0;
  _$jscoverage['uglify/consolidator.js'][1046] = 0;
  _$jscoverage['uglify/consolidator.js'][1047] = 0;
  _$jscoverage['uglify/consolidator.js'][1050] = 0;
  _$jscoverage['uglify/consolidator.js'][1054] = 0;
  _$jscoverage['uglify/consolidator.js'][1055] = 0;
  _$jscoverage['uglify/consolidator.js'][1058] = 0;
  _$jscoverage['uglify/consolidator.js'][1059] = 0;
  _$jscoverage['uglify/consolidator.js'][1062] = 0;
  _$jscoverage['uglify/consolidator.js'][1063] = 0;
  _$jscoverage['uglify/consolidator.js'][1065] = 0;
  _$jscoverage['uglify/consolidator.js'][1067] = 0;
  _$jscoverage['uglify/consolidator.js'][1069] = 0;
  _$jscoverage['uglify/consolidator.js'][1073] = 0;
  _$jscoverage['uglify/consolidator.js'][1074] = 0;
  _$jscoverage['uglify/consolidator.js'][1075] = 0;
  _$jscoverage['uglify/consolidator.js'][1077] = 0;
  _$jscoverage['uglify/consolidator.js'][1079] = 0;
  _$jscoverage['uglify/consolidator.js'][1080] = 0;
  _$jscoverage['uglify/consolidator.js'][1082] = 0;
  _$jscoverage['uglify/consolidator.js'][1085] = 0;
  _$jscoverage['uglify/consolidator.js'][1086] = 0;
  _$jscoverage['uglify/consolidator.js'][1088] = 0;
  _$jscoverage['uglify/consolidator.js'][1090] = 0;
  _$jscoverage['uglify/consolidator.js'][1092] = 0;
  _$jscoverage['uglify/consolidator.js'][1094] = 0;
  _$jscoverage['uglify/consolidator.js'][1097] = 0;
  _$jscoverage['uglify/consolidator.js'][1098] = 0;
  _$jscoverage['uglify/consolidator.js'][1099] = 0;
  _$jscoverage['uglify/consolidator.js'][1104] = 0;
  _$jscoverage['uglify/consolidator.js'][1105] = 0;
  _$jscoverage['uglify/consolidator.js'][1108] = 0;
  _$jscoverage['uglify/consolidator.js'][1113] = 0;
  _$jscoverage['uglify/consolidator.js'][1115] = 0;
  _$jscoverage['uglify/consolidator.js'][1117] = 0;
  _$jscoverage['uglify/consolidator.js'][1123] = 0;
  _$jscoverage['uglify/consolidator.js'][1124] = 0;
  _$jscoverage['uglify/consolidator.js'][1129] = 0;
  _$jscoverage['uglify/consolidator.js'][1135] = 0;
  _$jscoverage['uglify/consolidator.js'][1137] = 0;
  _$jscoverage['uglify/consolidator.js'][1141] = 0;
  _$jscoverage['uglify/consolidator.js'][1143] = 0;
  _$jscoverage['uglify/consolidator.js'][1144] = 0;
  _$jscoverage['uglify/consolidator.js'][1146] = 0;
  _$jscoverage['uglify/consolidator.js'][1148] = 0;
  _$jscoverage['uglify/consolidator.js'][1150] = 0;
  _$jscoverage['uglify/consolidator.js'][1151] = 0;
  _$jscoverage['uglify/consolidator.js'][1153] = 0;
  _$jscoverage['uglify/consolidator.js'][1154] = 0;
  _$jscoverage['uglify/consolidator.js'][1156] = 0;
  _$jscoverage['uglify/consolidator.js'][1159] = 0;
  _$jscoverage['uglify/consolidator.js'][1160] = 0;
  _$jscoverage['uglify/consolidator.js'][1164] = 0;
  _$jscoverage['uglify/consolidator.js'][1168] = 0;
  _$jscoverage['uglify/consolidator.js'][1171] = 0;
  _$jscoverage['uglify/consolidator.js'][1173] = 0;
  _$jscoverage['uglify/consolidator.js'][1174] = 0;
  _$jscoverage['uglify/consolidator.js'][1179] = 0;
  _$jscoverage['uglify/consolidator.js'][1182] = 0;
  _$jscoverage['uglify/consolidator.js'][1184] = 0;
  _$jscoverage['uglify/consolidator.js'][1186] = 0;
  _$jscoverage['uglify/consolidator.js'][1187] = 0;
  _$jscoverage['uglify/consolidator.js'][1190] = 0;
  _$jscoverage['uglify/consolidator.js'][1191] = 0;
  _$jscoverage['uglify/consolidator.js'][1194] = 0;
  _$jscoverage['uglify/consolidator.js'][1196] = 0;
  _$jscoverage['uglify/consolidator.js'][1197] = 0;
  _$jscoverage['uglify/consolidator.js'][1200] = 0;
  _$jscoverage['uglify/consolidator.js'][1201] = 0;
  _$jscoverage['uglify/consolidator.js'][1208] = 0;
}
_$jscoverage['uglify/consolidator.js'][91]++;
exports.ast_consolidate = (function (oAbstractSyntaxTree) {
  _$jscoverage['uglify/consolidator.js'][92]++;
  "use strict";
  _$jscoverage['uglify/consolidator.js'][98]++;
  var _, TSourceElementsData = (function () {
  _$jscoverage['uglify/consolidator.js'][110]++;
  this.nCategory = ESourceElementCategories.N_OTHER;
  _$jscoverage['uglify/consolidator.js'][116]++;
  this.aCount = [];
  _$jscoverage['uglify/consolidator.js'][117]++;
  this.aCount[EPrimaryExpressionCategories.N_IDENTIFIER_NAMES] = {};
  _$jscoverage['uglify/consolidator.js'][118]++;
  this.aCount[EPrimaryExpressionCategories.N_STRING_LITERALS] = {};
  _$jscoverage['uglify/consolidator.js'][119]++;
  this.aCount[EPrimaryExpressionCategories.N_NULL_AND_BOOLEAN_LITERALS] = {};
  _$jscoverage['uglify/consolidator.js'][125]++;
  this.aIdentifiers = [];
  _$jscoverage['uglify/consolidator.js'][131]++;
  this.aPrimitiveValues = [];
}), TPrimitiveValue = (function () {
  _$jscoverage['uglify/consolidator.js'][146]++;
  this.nSaving = 0;
  _$jscoverage['uglify/consolidator.js'][152]++;
  this.sName = "";
}), TSolution = (function () {
  _$jscoverage['uglify/consolidator.js'][168]++;
  this.oPrimitiveValues = {};
  _$jscoverage['uglify/consolidator.js'][176]++;
  this.nSavings = 0;
}), oProcessor = require("./process"), oWeights = {N_PROPERTY_ACCESSOR: 1, N_VARIABLE_DECLARATION: 2, N_VARIABLE_STATEMENT_AFFIXATION: 4, N_CLOSURE: 17}, EPrimaryExpressionCategories = {N_IDENTIFIER_NAMES: 0, N_STRING_LITERALS: 1, N_NULL_AND_BOOLEAN_LITERALS: 2}, EValuePrefixes = {S_STRING: "#S", S_SYMBOLIC: "#O"}, ESourceElementCategories = {N_WITH: 0, N_EVAL: 1, N_EXCLUDABLE: 2, N_OTHER: 3}, A_OTHER_SUBSTITUTABLE_LITERALS = ["null", "false", "true"];
  _$jscoverage['uglify/consolidator.js'][322]++;
  (function fExamineSyntacticCodeUnit(oSyntacticCodeUnit) {
  _$jscoverage['uglify/consolidator.js'][323]++;
  var _, bIsGlobal = "toplevel" === oSyntacticCodeUnit[0], bIsWhollyExaminable = ! bIsGlobal, oSourceElements, oSourceElementData, oScope, oWalker, oWalkers = {oSurveySourceElement: {"defun": (function (sIdentifier, aFormalParameterList, oFunctionBody) {
  _$jscoverage['uglify/consolidator.js'][385]++;
  fClassifyAsExcludable();
  _$jscoverage['uglify/consolidator.js'][386]++;
  fAddIdentifier(sIdentifier);
  _$jscoverage['uglify/consolidator.js'][387]++;
  aFormalParameterList.forEach(fAddIdentifier);
}), "dot": (function (oExpression, sIdentifierName) {
  _$jscoverage['uglify/consolidator.js'][402]++;
  fCountPrimaryExpression(EPrimaryExpressionCategories.N_IDENTIFIER_NAMES, EValuePrefixes.S_STRING + sIdentifierName);
  _$jscoverage['uglify/consolidator.js'][405]++;
  return ["dot", oWalker.walk(oExpression), sIdentifierName];
}), "function": (function (sIdentifier, aFormalParameterList, oFunctionBody) {
  _$jscoverage['uglify/consolidator.js'][419]++;
  if ("string" === typeof sIdentifier) {
    _$jscoverage['uglify/consolidator.js'][420]++;
    fAddIdentifier(sIdentifier);
  }
  _$jscoverage['uglify/consolidator.js'][422]++;
  aFormalParameterList.forEach(fAddIdentifier);
}), "name": (function (sIdentifier) {
  _$jscoverage['uglify/consolidator.js'][431]++;
  if (-1 !== A_OTHER_SUBSTITUTABLE_LITERALS.indexOf(sIdentifier)) {
    _$jscoverage['uglify/consolidator.js'][432]++;
    fCountPrimaryExpression(EPrimaryExpressionCategories.N_NULL_AND_BOOLEAN_LITERALS, EValuePrefixes.S_SYMBOLIC + sIdentifier);
  }
  else {
    _$jscoverage['uglify/consolidator.js'][436]++;
    if ("eval" === sIdentifier) {
      _$jscoverage['uglify/consolidator.js'][437]++;
      oSourceElementData.nCategory = ESourceElementCategories.N_EVAL;
    }
    _$jscoverage['uglify/consolidator.js'][440]++;
    fAddIdentifier(sIdentifier);
  }
}), "return": (function (oExpression) {
  _$jscoverage['uglify/consolidator.js'][451]++;
  fClassifyAsExcludable();
}), "string": (function (sStringValue) {
  _$jscoverage['uglify/consolidator.js'][460]++;
  if (sStringValue.length > 0) {
    _$jscoverage['uglify/consolidator.js'][461]++;
    fCountPrimaryExpression(EPrimaryExpressionCategories.N_STRING_LITERALS, EValuePrefixes.S_STRING + sStringValue);
  }
}), "try": (function (oTry, aCatch, oFinally) {
  _$jscoverage['uglify/consolidator.js'][477]++;
  if (Array.isArray(aCatch)) {
    _$jscoverage['uglify/consolidator.js'][478]++;
    fAddIdentifier(aCatch[0]);
  }
}), "var": (function (aVariableDeclarationList) {
  _$jscoverage['uglify/consolidator.js'][490]++;
  fClassifyAsExcludable();
  _$jscoverage['uglify/consolidator.js'][491]++;
  aVariableDeclarationList.forEach(fAddVariable);
}), "with": (function (oExpression, oStatement) {
  _$jscoverage['uglify/consolidator.js'][506]++;
  oSourceElementData.nCategory = ESourceElementCategories.N_WITH;
  _$jscoverage['uglify/consolidator.js'][507]++;
  return [];
})}, oExamineFunctions: {"defun": (function () {
  _$jscoverage['uglify/consolidator.js'][527]++;
  fExamineSyntacticCodeUnit(this);
  _$jscoverage['uglify/consolidator.js'][528]++;
  return [];
}), "function": (function () {
  _$jscoverage['uglify/consolidator.js'][539]++;
  fExamineSyntacticCodeUnit(this);
  _$jscoverage['uglify/consolidator.js'][540]++;
  return [];
})}}, aSourceElementsData = [], nAfterDirectivePrologue = 0, nPosition, nTo, cContext = (function (oWalker, oSourceElement) {
  _$jscoverage['uglify/consolidator.js'][584]++;
  var fLambda = (function () {
  _$jscoverage['uglify/consolidator.js'][585]++;
  return oWalker.walk(oSourceElement);
});
  _$jscoverage['uglify/consolidator.js'][588]++;
  return fLambda;
}), fClassifyAsExcludable = (function () {
  _$jscoverage['uglify/consolidator.js'][596]++;
  if (oSourceElementData.nCategory === ESourceElementCategories.N_OTHER) {
    _$jscoverage['uglify/consolidator.js'][598]++;
    oSourceElementData.nCategory = ESourceElementCategories.N_EXCLUDABLE;
  }
}), fAddIdentifier = (function (sIdentifier) {
  _$jscoverage['uglify/consolidator.js'][607]++;
  if (-1 === oSourceElementData.aIdentifiers.indexOf(sIdentifier)) {
    _$jscoverage['uglify/consolidator.js'][608]++;
    oSourceElementData.aIdentifiers.push(sIdentifier);
  }
}), fAddVariable = (function (aVariableDeclaration) {
  _$jscoverage['uglify/consolidator.js'][617]++;
  fAddIdentifier(aVariableDeclaration[0]);
}), fCountPrimaryExpression = (function (nCategory, sName) {
  _$jscoverage['uglify/consolidator.js'][627]++;
  if (! oSourceElementData.aCount[nCategory].hasOwnProperty(sName)) {
    _$jscoverage['uglify/consolidator.js'][628]++;
    oSourceElementData.aCount[nCategory][sName] = 0;
    _$jscoverage['uglify/consolidator.js'][629]++;
    if (-1 === oSourceElementData.aPrimitiveValues.indexOf(sName)) {
      _$jscoverage['uglify/consolidator.js'][630]++;
      oSourceElementData.aPrimitiveValues.push(sName);
    }
  }
  _$jscoverage['uglify/consolidator.js'][633]++;
  oSourceElementData.aCount[nCategory][sName] += 1;
}), fExamineSourceElements = (function (nFrom, nTo, bEnclose) {
  _$jscoverage['uglify/consolidator.js'][649]++;
  var _, nIndex = oScope.cname, nPosition, oWalkersTransformers = {"dot": (function (oExpression, sIdentifierName) {
  _$jscoverage['uglify/consolidator.js'][692]++;
  var sPrefixed = EValuePrefixes.S_STRING + sIdentifierName;
  _$jscoverage['uglify/consolidator.js'][694]++;
  return oSolutionBest.oPrimitiveValues.hasOwnProperty(sPrefixed) && oSolutionBest.oPrimitiveValues[sPrefixed].nSaving > 0? ["sub", oWalker.walk(oExpression), ["name", oSolutionBest.oPrimitiveValues[sPrefixed].sName]]: ["dot", oWalker.walk(oExpression), sIdentifierName];
}), "name": (function (sIdentifier) {
  _$jscoverage['uglify/consolidator.js'][718]++;
  var sPrefixed = EValuePrefixes.S_SYMBOLIC + sIdentifier;
  _$jscoverage['uglify/consolidator.js'][720]++;
  return ["name", oSolutionBest.oPrimitiveValues.hasOwnProperty(sPrefixed) && oSolutionBest.oPrimitiveValues[sPrefixed].nSaving > 0? oSolutionBest.oPrimitiveValues[sPrefixed].sName: sIdentifier];
}), "string": (function (sStringValue) {
  _$jscoverage['uglify/consolidator.js'][745]++;
  var sPrefixed = EValuePrefixes.S_STRING + sStringValue;
  _$jscoverage['uglify/consolidator.js'][748]++;
  return oSolutionBest.oPrimitiveValues.hasOwnProperty(sPrefixed) && oSolutionBest.oPrimitiveValues[sPrefixed].nSaving > 0? ["name", oSolutionBest.oPrimitiveValues[sPrefixed].sName]: ["string", sStringValue];
})}, oSolutionBest = new TSolution(), oSolutionCandidate = new TSolution(), oSourceElementsData = new TSourceElementsData(), aVariableDeclarations = [], cAugmentList = (function (aList) {
  _$jscoverage['uglify/consolidator.js'][797]++;
  var fLambda = (function (sPrefixed) {
  _$jscoverage['uglify/consolidator.js'][798]++;
  if (-1 === aList.indexOf(sPrefixed)) {
    _$jscoverage['uglify/consolidator.js'][799]++;
    aList.push(sPrefixed);
  }
});
  _$jscoverage['uglify/consolidator.js'][803]++;
  return fLambda;
}), cAddOccurrences = (function (nPosition, nCategory) {
  _$jscoverage['uglify/consolidator.js'][824]++;
  var fLambda = (function (sPrefixed) {
  _$jscoverage['uglify/consolidator.js'][825]++;
  if (! oSourceElementsData.aCount[nCategory].hasOwnProperty(sPrefixed)) {
    _$jscoverage['uglify/consolidator.js'][827]++;
    oSourceElementsData.aCount[nCategory][sPrefixed] = 0;
  }
  _$jscoverage['uglify/consolidator.js'][829]++;
  oSourceElementsData.aCount[nCategory][sPrefixed] += aSourceElementsData[nPosition].aCount[nCategory][sPrefixed];
});
  _$jscoverage['uglify/consolidator.js'][834]++;
  return fLambda;
}), cAddOccurrencesInCategory = (function (nPosition) {
  _$jscoverage['uglify/consolidator.js'][853]++;
  var fLambda = (function (nCategory) {
  _$jscoverage['uglify/consolidator.js'][854]++;
  Object.keys(aSourceElementsData[nPosition].aCount[nCategory]).forEach(cAddOccurrences(nPosition, nCategory));
});
  _$jscoverage['uglify/consolidator.js'][859]++;
  return fLambda;
}), fAddOccurrences = (function (nPosition) {
  _$jscoverage['uglify/consolidator.js'][871]++;
  Object.keys(aSourceElementsData[nPosition].aCount).forEach(cAddOccurrencesInCategory(nPosition));
}), cAugmentVariableDeclarations = (function (sPrefixed) {
  _$jscoverage['uglify/consolidator.js'][883]++;
  if (oSolutionBest.oPrimitiveValues[sPrefixed].nSaving > 0) {
    _$jscoverage['uglify/consolidator.js'][884]++;
    aVariableDeclarations.push([oSolutionBest.oPrimitiveValues[sPrefixed].sName, [0 === sPrefixed.indexOf(EValuePrefixes.S_SYMBOLIC)? "name": "string", sPrefixed.substring(EValuePrefixes.S_SYMBOLIC.length)]]);
  }
}), cSortPrimitiveValues = (function (sPrefixed0, sPrefixed1) {
  _$jscoverage['uglify/consolidator.js'][929]++;
  var nDifference = oSolutionCandidate.oPrimitiveValues[sPrefixed0].nSaving - oSolutionCandidate.oPrimitiveValues[sPrefixed1].nSaving;
  _$jscoverage['uglify/consolidator.js'][933]++;
  return nDifference > 0? -1: nDifference < 0? 1: 0;
}), fEvaluatePrimitiveValue = (function (sPrefixed) {
  _$jscoverage['uglify/consolidator.js'][943]++;
  var _, nIndex, sName = sPrefixed.substring(EValuePrefixes.S_SYMBOLIC.length), nLengthOriginal = sName.length, nLengthSubstitution, nLengthString = oProcessor.make_string(sName).length;
  _$jscoverage['uglify/consolidator.js'][980]++;
  oSolutionCandidate.oPrimitiveValues[sPrefixed] = new TPrimitiveValue();
  _$jscoverage['uglify/consolidator.js'][982]++;
  do {
    _$jscoverage['uglify/consolidator.js'][983]++;
    nIndex = oScope.cname;
    _$jscoverage['uglify/consolidator.js'][984]++;
    oSolutionCandidate.oPrimitiveValues[sPrefixed].sName = oScope.next_mangled();
}
  while (-1 !== oSourceElementsData.aIdentifiers.indexOf(oSolutionCandidate.oPrimitiveValues[sPrefixed].sName));
  _$jscoverage['uglify/consolidator.js'][988]++;
  nLengthSubstitution = oSolutionCandidate.oPrimitiveValues[sPrefixed].sName.length;
  _$jscoverage['uglify/consolidator.js'][990]++;
  if (0 === sPrefixed.indexOf(EValuePrefixes.S_SYMBOLIC)) {
    _$jscoverage['uglify/consolidator.js'][992]++;
    oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving -= nLengthSubstitution + nLengthOriginal + oWeights.N_VARIABLE_DECLARATION;
    _$jscoverage['uglify/consolidator.js'][996]++;
    oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving += oSourceElementsData.aCount[EPrimaryExpressionCategories.N_NULL_AND_BOOLEAN_LITERALS][sPrefixed] * (nLengthOriginal - nLengthSubstitution);
  }
  else {
    _$jscoverage['uglify/consolidator.js'][1003]++;
    oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving -= nLengthSubstitution + nLengthString + oWeights.N_VARIABLE_DECLARATION;
    _$jscoverage['uglify/consolidator.js'][1007]++;
    if (oSourceElementsData.aCount[EPrimaryExpressionCategories.N_IDENTIFIER_NAMES].hasOwnProperty(sPrefixed)) {
      _$jscoverage['uglify/consolidator.js'][1010]++;
      oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving += oSourceElementsData.aCount[EPrimaryExpressionCategories.N_IDENTIFIER_NAMES][sPrefixed] * (nLengthOriginal - nLengthSubstitution - oWeights.N_PROPERTY_ACCESSOR);
    }
    _$jscoverage['uglify/consolidator.js'][1018]++;
    if (oSourceElementsData.aCount[EPrimaryExpressionCategories.N_STRING_LITERALS].hasOwnProperty(sPrefixed)) {
      _$jscoverage['uglify/consolidator.js'][1021]++;
      oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving += oSourceElementsData.aCount[EPrimaryExpressionCategories.N_STRING_LITERALS][sPrefixed] * (nLengthString - nLengthSubstitution);
    }
  }
  _$jscoverage['uglify/consolidator.js'][1028]++;
  if (oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving > 0) {
    _$jscoverage['uglify/consolidator.js'][1030]++;
    oSolutionCandidate.nSavings += oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving;
  }
  else {
    _$jscoverage['uglify/consolidator.js'][1033]++;
    oScope.cname = nIndex;
  }
}), cAddVariableDeclaration = (function (aVariableDeclaration) {
  _$jscoverage['uglify/consolidator.js'][1042]++;
  oSourceElements[nFrom][1].unshift(aVariableDeclaration);
});
  _$jscoverage['uglify/consolidator.js'][1046]++;
  if (nFrom > nTo) {
    _$jscoverage['uglify/consolidator.js'][1047]++;
    return;
  }
  _$jscoverage['uglify/consolidator.js'][1050]++;
  if (nFrom === nTo && "stat" === oSourceElements[nFrom][0] && "call" === oSourceElements[nFrom][1][0] && "function" === oSourceElements[nFrom][1][1][0]) {
    _$jscoverage['uglify/consolidator.js'][1054]++;
    fExamineSyntacticCodeUnit(oSourceElements[nFrom][1][1]);
    _$jscoverage['uglify/consolidator.js'][1055]++;
    return;
  }
  _$jscoverage['uglify/consolidator.js'][1058]++;
  for (nPosition = nFrom; nPosition <= nTo; nPosition += 1) {
    _$jscoverage['uglify/consolidator.js'][1059]++;
    aSourceElementsData[nPosition].aPrimitiveValues.forEach(cAugmentList(oSourceElementsData.aPrimitiveValues));
}
  _$jscoverage['uglify/consolidator.js'][1062]++;
  if (0 === oSourceElementsData.aPrimitiveValues.length) {
    _$jscoverage['uglify/consolidator.js'][1063]++;
    return;
  }
  _$jscoverage['uglify/consolidator.js'][1065]++;
  for (nPosition = nFrom; nPosition <= nTo; nPosition += 1) {
    _$jscoverage['uglify/consolidator.js'][1067]++;
    fAddOccurrences(nPosition);
    _$jscoverage['uglify/consolidator.js'][1069]++;
    aSourceElementsData[nPosition].aIdentifiers.forEach(cAugmentList(oSourceElementsData.aIdentifiers));
}
  _$jscoverage['uglify/consolidator.js'][1073]++;
  do {
    _$jscoverage['uglify/consolidator.js'][1074]++;
    oSolutionBest = oSolutionCandidate;
    _$jscoverage['uglify/consolidator.js'][1075]++;
    if (Object.keys(oSolutionCandidate.oPrimitiveValues).length > 0) {
      _$jscoverage['uglify/consolidator.js'][1077]++;
      oSourceElementsData.aPrimitiveValues.sort(cSortPrimitiveValues);
    }
    _$jscoverage['uglify/consolidator.js'][1079]++;
    oSolutionCandidate = new TSolution();
    _$jscoverage['uglify/consolidator.js'][1080]++;
    oSourceElementsData.aPrimitiveValues.forEach(fEvaluatePrimitiveValue);
    _$jscoverage['uglify/consolidator.js'][1082]++;
    oScope.cname = nIndex;
}
  while (oSolutionCandidate.nSavings > oSolutionBest.nSavings);
  _$jscoverage['uglify/consolidator.js'][1085]++;
  if ("var" !== oSourceElements[nFrom][0]) {
    _$jscoverage['uglify/consolidator.js'][1086]++;
    oSolutionBest.nSavings -= oWeights.N_VARIABLE_STATEMENT_AFFIXATION;
  }
  _$jscoverage['uglify/consolidator.js'][1088]++;
  if (bEnclose) {
    _$jscoverage['uglify/consolidator.js'][1090]++;
    oSolutionBest.nSavings -= oWeights.N_CLOSURE;
  }
  _$jscoverage['uglify/consolidator.js'][1092]++;
  if (oSolutionBest.nSavings > 0) {
    _$jscoverage['uglify/consolidator.js'][1094]++;
    Object.keys(oSolutionBest.oPrimitiveValues).forEach(cAugmentVariableDeclarations);
    _$jscoverage['uglify/consolidator.js'][1097]++;
    for (nPosition = nFrom; nPosition <= nTo; nPosition += 1) {
      _$jscoverage['uglify/consolidator.js'][1098]++;
      oWalker = oProcessor.ast_walker();
      _$jscoverage['uglify/consolidator.js'][1099]++;
      oSourceElements[nPosition] = oWalker.with_walkers(oWalkersTransformers, cContext(oWalker, oSourceElements[nPosition]));
}
    _$jscoverage['uglify/consolidator.js'][1104]++;
    if ("var" === oSourceElements[nFrom][0]) {
      _$jscoverage['uglify/consolidator.js'][1105]++;
      aVariableDeclarations.reverse().forEach(cAddVariableDeclaration);
    }
    else {
      _$jscoverage['uglify/consolidator.js'][1108]++;
      Array.prototype.splice.call(oSourceElements, nFrom, 0, ["var", aVariableDeclarations]);
      _$jscoverage['uglify/consolidator.js'][1113]++;
      nTo += 1;
    }
    _$jscoverage['uglify/consolidator.js'][1115]++;
    if (bEnclose) {
      _$jscoverage['uglify/consolidator.js'][1117]++;
      Array.prototype.splice.call(oSourceElements, nFrom, 0, ["stat", ["call", ["function", null, [], []], []]]);
      _$jscoverage['uglify/consolidator.js'][1123]++;
      for (nPosition = nTo + 1; nPosition > nFrom; nPosition -= 1) {
        _$jscoverage['uglify/consolidator.js'][1124]++;
        Array.prototype.unshift.call(oSourceElements[nFrom][1][1][3], oSourceElements[nPosition]);
}
      _$jscoverage['uglify/consolidator.js'][1129]++;
      Array.prototype.splice.call(oSourceElements, nFrom + 1, nTo - nFrom + 1);
    }
  }
  _$jscoverage['uglify/consolidator.js'][1135]++;
  if (bEnclose) {
    _$jscoverage['uglify/consolidator.js'][1137]++;
    oScope.cname = nIndex;
  }
});
  _$jscoverage['uglify/consolidator.js'][1141]++;
  oSourceElements = oSyntacticCodeUnit[bIsGlobal? 1: 3];
  _$jscoverage['uglify/consolidator.js'][1143]++;
  if (0 === oSourceElements.length) {
    _$jscoverage['uglify/consolidator.js'][1144]++;
    return;
  }
  _$jscoverage['uglify/consolidator.js'][1146]++;
  oScope = bIsGlobal? oSyntacticCodeUnit.scope: oSourceElements.scope;
  _$jscoverage['uglify/consolidator.js'][1148]++;
  while (nAfterDirectivePrologue < oSourceElements.length && "directive" === oSourceElements[nAfterDirectivePrologue][0]) {
    _$jscoverage['uglify/consolidator.js'][1150]++;
    nAfterDirectivePrologue += 1;
    _$jscoverage['uglify/consolidator.js'][1151]++;
    aSourceElementsData.push(null);
}
  _$jscoverage['uglify/consolidator.js'][1153]++;
  if (oSourceElements.length === nAfterDirectivePrologue) {
    _$jscoverage['uglify/consolidator.js'][1154]++;
    return;
  }
  _$jscoverage['uglify/consolidator.js'][1156]++;
  for (nPosition = nAfterDirectivePrologue; nPosition < oSourceElements.length; nPosition += 1) {
    _$jscoverage['uglify/consolidator.js'][1159]++;
    oSourceElementData = new TSourceElementsData();
    _$jscoverage['uglify/consolidator.js'][1160]++;
    oWalker = oProcessor.ast_walker();
    _$jscoverage['uglify/consolidator.js'][1164]++;
    oWalker.with_walkers(oWalkers.oSurveySourceElement, cContext(oWalker, oSourceElements[nPosition]));
    _$jscoverage['uglify/consolidator.js'][1168]++;
    bIsWhollyExaminable = bIsWhollyExaminable && ESourceElementCategories.N_WITH !== oSourceElementData.nCategory && ESourceElementCategories.N_EVAL !== oSourceElementData.nCategory;
    _$jscoverage['uglify/consolidator.js'][1171]++;
    aSourceElementsData.push(oSourceElementData);
}
  _$jscoverage['uglify/consolidator.js'][1173]++;
  if (bIsWhollyExaminable) {
    _$jscoverage['uglify/consolidator.js'][1174]++;
    fExamineSourceElements(nAfterDirectivePrologue, oSourceElements.length - 1, false);
  }
  else {
    _$jscoverage['uglify/consolidator.js'][1179]++;
    for (nPosition = oSourceElements.length - 1; nPosition >= nAfterDirectivePrologue; nPosition -= 1) {
      _$jscoverage['uglify/consolidator.js'][1182]++;
      oSourceElementData = aSourceElementsData[nPosition];
      _$jscoverage['uglify/consolidator.js'][1184]++;
      if (ESourceElementCategories.N_OTHER === oSourceElementData.nCategory) {
        _$jscoverage['uglify/consolidator.js'][1186]++;
        if ("undefined" === typeof nTo) {
          _$jscoverage['uglify/consolidator.js'][1187]++;
          nTo = nPosition;
        }
        _$jscoverage['uglify/consolidator.js'][1190]++;
        if (nPosition === nAfterDirectivePrologue) {
          _$jscoverage['uglify/consolidator.js'][1191]++;
          fExamineSourceElements(nPosition, nTo, true);
        }
      }
      else {
        _$jscoverage['uglify/consolidator.js'][1194]++;
        if ("undefined" !== typeof nTo) {
          _$jscoverage['uglify/consolidator.js'][1196]++;
          fExamineSourceElements(nPosition + 1, nTo, true);
          _$jscoverage['uglify/consolidator.js'][1197]++;
          nTo = void 0;
        }
        _$jscoverage['uglify/consolidator.js'][1200]++;
        oWalker = oProcessor.ast_walker();
        _$jscoverage['uglify/consolidator.js'][1201]++;
        oWalker.with_walkers(oWalkers.oExamineFunctions, cContext(oWalker, oSourceElements[nPosition]));
      }
}
  }
})(oAbstractSyntaxTree = oProcessor.ast_add_scope(oAbstractSyntaxTree));
  _$jscoverage['uglify/consolidator.js'][1208]++;
  return oAbstractSyntaxTree;
});
_$jscoverage['uglify/consolidator.js'].source = ["/**"," * @preserve Copyright 2012 Robert Gust-Bardon &lt;http://robert.gust-bardon.org/&gt;."," * All rights reserved."," *"," * Redistribution and use in source and binary forms, with or without"," * modification, are permitted provided that the following conditions"," * are met:"," *"," *     * Redistributions of source code must retain the above"," *       copyright notice, this list of conditions and the following"," *       disclaimer."," *"," *     * Redistributions in binary form must reproduce the above"," *       copyright notice, this list of conditions and the following"," *       disclaimer in the documentation and/or other materials"," *       provided with the distribution."," *"," * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER \"AS IS\" AND ANY"," * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE"," * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR"," * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE"," * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,"," * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,"," * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR"," * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY"," * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR"," * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF"," * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"," * SUCH DAMAGE."," */","","/**"," * @fileoverview Enhances &lt;a href=\"https://github.com/mishoo/UglifyJS/\""," * &gt;UglifyJS&lt;/a&gt; with consolidation of null, Boolean, and String values."," * &lt;p&gt;Also known as aliasing, this feature has been deprecated in &lt;a href="," * \"http://closure-compiler.googlecode.com/\"&gt;the Closure Compiler&lt;/a&gt; since its"," * initial release, where it is unavailable from the &lt;abbr title="," * \"command line interface\"&gt;CLI&lt;/a&gt;. The Closure Compiler allows one to log and"," * influence this process. In contrast, this implementation does not introduce"," * any variable declarations in global code and derives String values from"," * identifier names used as property accessors.&lt;/p&gt;"," * &lt;p&gt;Consolidating literals may worsen the data compression ratio when an &lt;a"," * href=\"http://tools.ietf.org/html/rfc2616#section-3.5\"&gt;encoding"," * transformation&lt;/a&gt; is applied. For instance, &lt;a href="," * \"http://code.jquery.com/jquery-1.7.1.js\"&gt;jQuery 1.7.1&lt;/a&gt; takes 248235 bytes."," * Building it with &lt;a href=\"https://github.com/mishoo/UglifyJS/tarball/v1.2.5\"&gt;"," * UglifyJS v1.2.5&lt;/a&gt; results in 93647 bytes (37.73% of the original) which are"," * then compressed to 33154 bytes (13.36% of the original) using &lt;a href="," * \"http://linux.die.net/man/1/gzip\"&gt;gzip(1)&lt;/a&gt;. Building it with the same"," * version of UglifyJS 1.2.5 patched with the implementation of consolidation"," * results in 80784 bytes (a decrease of 12863 bytes, i.e. 13.74%, in comparison"," * to the aforementioned 93647 bytes) which are then compressed to 34013 bytes"," * (an increase of 859 bytes, i.e. 2.59%, in comparison to the aforementioned"," * 33154 bytes).&lt;/p&gt;"," * &lt;p&gt;Written in &lt;a href=\"http://es5.github.com/#x4.2.2\"&gt;the strict variant&lt;/a&gt;"," * of &lt;a href=\"http://es5.github.com/\"&gt;ECMA-262 5.1 Edition&lt;/a&gt;. Encoded in &lt;a"," * href=\"http://tools.ietf.org/html/rfc3629\"&gt;UTF-8&lt;/a&gt;. Follows &lt;a href="," * \"http://google-styleguide.googlecode.com/svn-history/r76/trunk/javascriptguide.xml\""," * &gt;Revision 2.28 of the Google JavaScript Style Guide&lt;/a&gt; (except for the"," * discouraged use of the {@code function} tag and the {@code namespace} tag)."," * 100% typed for the &lt;a href="," * \"http://closure-compiler.googlecode.com/files/compiler-20120123.tar.gz\""," * &gt;Closure Compiler Version 1741&lt;/a&gt;.&lt;/p&gt;"," * &lt;p&gt;Should you find this software useful, please consider &lt;a href="," * \"https://paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=JZLW72X8FD4WG\""," * &gt;a donation&lt;/a&gt;.&lt;/p&gt;"," * @author follow.me@RGustBardon (Robert Gust-Bardon)"," * @supported Tested with:"," *     &lt;ul&gt;"," *     &lt;li&gt;&lt;a href=\"http://nodejs.org/dist/v0.6.10/\"&gt;Node v0.6.10&lt;/a&gt;,&lt;/li&gt;"," *     &lt;li&gt;&lt;a href=\"https://github.com/mishoo/UglifyJS/tarball/v1.2.5\"&gt;UglifyJS"," *       v1.2.5&lt;/a&gt;.&lt;/li&gt;"," *     &lt;/ul&gt;"," */","","/*global console:false, exports:true, module:false, require:false */","/*jshint sub:true */","/**"," * Consolidates null, Boolean, and String values found inside an &lt;abbr title="," * \"abstract syntax tree\"&gt;AST&lt;/abbr&gt;."," * @param {!TSyntacticCodeUnit} oAbstractSyntaxTree An array-like object"," *     representing an &lt;abbr title=\"abstract syntax tree\"&gt;AST&lt;/abbr&gt;."," * @return {!TSyntacticCodeUnit} An array-like object representing an &lt;abbr"," *     title=\"abstract syntax tree\"&gt;AST&lt;/abbr&gt; with its null, Boolean, and"," *     String values consolidated."," */","// TODO(user) Consolidation of mathematical values found in numeric literals.","// TODO(user) Unconsolidation.","// TODO(user) Consolidation of ECMA-262 6th Edition programs.","// TODO(user) Rewrite in ECMA-262 6th Edition.","exports['ast_consolidate'] = function(oAbstractSyntaxTree) {","  'use strict';","  /*jshint bitwise:true, curly:true, eqeqeq:true, forin:true, immed:true,","        latedef:true, newcap:true, noarge:true, noempty:true, nonew:true,","        onevar:true, plusplus:true, regexp:true, undef:true, strict:true,","        sub:false, trailing:true */","","  var _,","      /**","       * A record consisting of data about one or more source elements.","       * @constructor","       * @nosideeffects","       */","      TSourceElementsData = function() {","        /**","         * The category of the elements.","         * @type {number}","         * @see ESourceElementCategories","         */","        this.nCategory = ESourceElementCategories.N_OTHER;","        /**","         * The number of occurrences (within the elements) of each primitive","         * value that could be consolidated.","         * @type {!Array.&lt;!Object.&lt;string, number&gt;&gt;}","         */","        this.aCount = [];","        this.aCount[EPrimaryExpressionCategories.N_IDENTIFIER_NAMES] = {};","        this.aCount[EPrimaryExpressionCategories.N_STRING_LITERALS] = {};","        this.aCount[EPrimaryExpressionCategories.N_NULL_AND_BOOLEAN_LITERALS] =","            {};","        /**","         * Identifier names found within the elements.","         * @type {!Array.&lt;string&gt;}","         */","        this.aIdentifiers = [];","        /**","         * Prefixed representation Strings of each primitive value that could be","         * consolidated within the elements.","         * @type {!Array.&lt;string&gt;}","         */","        this.aPrimitiveValues = [];","      },","      /**","       * A record consisting of data about a primitive value that could be","       * consolidated.","       * @constructor","       * @nosideeffects","       */","      TPrimitiveValue = function() {","        /**","         * The difference in the number of terminal symbols between the original","         * source text and the one with the primitive value consolidated. If the","         * difference is positive, the primitive value is considered worthwhile.","         * @type {number}","         */","        this.nSaving = 0;","        /**","         * An identifier name of the variable that will be declared and assigned","         * the primitive value if the primitive value is consolidated.","         * @type {string}","         */","        this.sName = '';","      },","      /**","       * A record consisting of data on what to consolidate within the range of","       * source elements that is currently being considered.","       * @constructor","       * @nosideeffects","       */","      TSolution = function() {","        /**","         * An object whose keys are prefixed representation Strings of each","         * primitive value that could be consolidated within the elements and","         * whose values are corresponding data about those primitive values.","         * @type {!Object.&lt;string, {nSaving: number, sName: string}&gt;}","         * @see TPrimitiveValue","         */","        this.oPrimitiveValues = {};","        /**","         * The difference in the number of terminal symbols between the original","         * source text and the one with all the worthwhile primitive values","         * consolidated.","         * @type {number}","         * @see TPrimitiveValue#nSaving","         */","        this.nSavings = 0;","      },","      /**","       * The processor of &lt;abbr title=\"abstract syntax tree\"&gt;AST&lt;/abbr&gt;s found","       * in UglifyJS.","       * @namespace","       * @type {!TProcessor}","       */","      oProcessor = (/** @type {!TProcessor} */ require('./process')),","      /**","       * A record consisting of a number of constants that represent the","       * difference in the number of terminal symbols between a source text with","       * a modified syntactic code unit and the original one.","       * @namespace","       * @type {!Object.&lt;string, number&gt;}","       */","      oWeights = {","        /**","         * The difference in the number of punctuators required by the bracket","         * notation and the dot notation.","         * &lt;p&gt;&lt;code&gt;'[]'.length - '.'.length&lt;/code&gt;&lt;/p&gt;","         * @const","         * @type {number}","         */","        N_PROPERTY_ACCESSOR: 1,","        /**","         * The number of punctuators required by a variable declaration with an","         * initialiser.","         * &lt;p&gt;&lt;code&gt;':'.length + ';'.length&lt;/code&gt;&lt;/p&gt;","         * @const","         * @type {number}","         */","        N_VARIABLE_DECLARATION: 2,","        /**","         * The number of terminal symbols required to introduce a variable","         * statement (excluding its variable declaration list).","         * &lt;p&gt;&lt;code&gt;'var '.length&lt;/code&gt;&lt;/p&gt;","         * @const","         * @type {number}","         */","        N_VARIABLE_STATEMENT_AFFIXATION: 4,","        /**","         * The number of terminal symbols needed to enclose source elements","         * within a function call with no argument values to a function with an","         * empty parameter list.","         * &lt;p&gt;&lt;code&gt;'(function(){}());'.length&lt;/code&gt;&lt;/p&gt;","         * @const","         * @type {number}","         */","        N_CLOSURE: 17","      },","      /**","       * Categories of primary expressions from which primitive values that","       * could be consolidated are derivable.","       * @namespace","       * @enum {number}","       */","      EPrimaryExpressionCategories = {","        /**","         * Identifier names used as property accessors.","         * @type {number}","         */","        N_IDENTIFIER_NAMES: 0,","        /**","         * String literals.","         * @type {number}","         */","        N_STRING_LITERALS: 1,","        /**","         * Null and Boolean literals.","         * @type {number}","         */","        N_NULL_AND_BOOLEAN_LITERALS: 2","      },","      /**","       * Prefixes of primitive values that could be consolidated.","       * The String values of the prefixes must have same number of characters.","       * The prefixes must not be used in any properties defined in any version","       * of &lt;a href=","       * \"http://www.ecma-international.org/publications/standards/Ecma-262.htm\"","       * &gt;ECMA-262&lt;/a&gt;.","       * @namespace","       * @enum {string}","       */","      EValuePrefixes = {","        /**","         * Identifies String values.","         * @type {string}","         */","        S_STRING: '#S',","        /**","         * Identifies null and Boolean values.","         * @type {string}","         */","        S_SYMBOLIC: '#O'","      },","      /**","       * Categories of source elements in terms of their appropriateness of","       * having their primitive values consolidated.","       * @namespace","       * @enum {number}","       */","      ESourceElementCategories = {","        /**","         * Identifies a source element that includes the &lt;a href=","         * \"http://es5.github.com/#x12.10\"&gt;{@code with}&lt;/a&gt; statement.","         * @type {number}","         */","        N_WITH: 0,","        /**","         * Identifies a source element that includes the &lt;a href=","         * \"http://es5.github.com/#x15.1.2.1\"&gt;{@code eval}&lt;/a&gt; identifier name.","         * @type {number}","         */","        N_EVAL: 1,","        /**","         * Identifies a source element that must be excluded from the process","         * unless its whole scope is examined.","         * @type {number}","         */","        N_EXCLUDABLE: 2,","        /**","         * Identifies source elements not posing any problems.","         * @type {number}","         */","        N_OTHER: 3","      },","      /**","       * The list of literals (other than the String ones) whose primitive","       * values can be consolidated.","       * @const","       * @type {!Array.&lt;string&gt;}","       */","      A_OTHER_SUBSTITUTABLE_LITERALS = [","        'null',   // The null literal.","        'false',  // The Boolean literal {@code false}.","        'true'    // The Boolean literal {@code true}.","      ];","","  (/**","    * Consolidates all worthwhile primitive values in a syntactic code unit.","    * @param {!TSyntacticCodeUnit} oSyntacticCodeUnit An array-like object","    *     representing the branch of the abstract syntax tree representing the","    *     syntactic code unit along with its scope.","    * @see TPrimitiveValue#nSaving","    */","   function fExamineSyntacticCodeUnit(oSyntacticCodeUnit) {","     var _,","         /**","          * Indicates whether the syntactic code unit represents global code.","          * @type {boolean}","          */","         bIsGlobal = 'toplevel' === oSyntacticCodeUnit[0],","         /**","          * Indicates whether the whole scope is being examined.","          * @type {boolean}","          */","         bIsWhollyExaminable = !bIsGlobal,","         /**","          * An array-like object representing source elements that constitute a","          * syntactic code unit.","          * @type {!TSyntacticCodeUnit}","          */","         oSourceElements,","         /**","          * A record consisting of data about the source element that is","          * currently being examined.","          * @type {!TSourceElementsData}","          */","         oSourceElementData,","         /**","          * The scope of the syntactic code unit.","          * @type {!TScope}","          */","         oScope,","         /**","          * An instance of an object that allows the traversal of an &lt;abbr","          * title=\"abstract syntax tree\"&gt;AST&lt;/abbr&gt;.","          * @type {!TWalker}","          */","         oWalker,","         /**","          * An object encompassing collections of functions used during the","          * traversal of an &lt;abbr title=\"abstract syntax tree\"&gt;AST&lt;/abbr&gt;.","          * @namespace","          * @type {!Object.&lt;string, !Object.&lt;string, function(...[*])&gt;&gt;}","          */","         oWalkers = {","           /**","            * A collection of functions used during the surveyance of source","            * elements.","            * @namespace","            * @type {!Object.&lt;string, function(...[*])&gt;}","            */","           oSurveySourceElement: {","             /**#nocode+*/  // JsDoc Toolkit 2.4.0 hides some of the keys.","             /**","              * Classifies the source element as excludable if it does not","              * contain a {@code with} statement or the {@code eval} identifier","              * name. Adds the identifier of the function and its formal","              * parameters to the list of identifier names found.","              * @param {string} sIdentifier The identifier of the function.","              * @param {!Array.&lt;string&gt;} aFormalParameterList Formal parameters.","              * @param {!TSyntacticCodeUnit} oFunctionBody Function code.","              */","             'defun': function(","                 sIdentifier,","                 aFormalParameterList,","                 oFunctionBody) {","               fClassifyAsExcludable();","               fAddIdentifier(sIdentifier);","               aFormalParameterList.forEach(fAddIdentifier);","             },","             /**","              * Increments the count of the number of occurrences of the String","              * value that is equivalent to the sequence of terminal symbols","              * that constitute the encountered identifier name.","              * @param {!TSyntacticCodeUnit} oExpression The nonterminal","              *     MemberExpression.","              * @param {string} sIdentifierName The identifier name used as the","              *     property accessor.","              * @return {!Array} The encountered branch of an &lt;abbr title=","              *     \"abstract syntax tree\"&gt;AST&lt;/abbr&gt; with its nonterminal","              *     MemberExpression traversed.","              */","             'dot': function(oExpression, sIdentifierName) {","               fCountPrimaryExpression(","                   EPrimaryExpressionCategories.N_IDENTIFIER_NAMES,","                   EValuePrefixes.S_STRING + sIdentifierName);","               return ['dot', oWalker.walk(oExpression), sIdentifierName];","             },","             /**","              * Adds the optional identifier of the function and its formal","              * parameters to the list of identifier names found.","              * @param {?string} sIdentifier The optional identifier of the","              *     function.","              * @param {!Array.&lt;string&gt;} aFormalParameterList Formal parameters.","              * @param {!TSyntacticCodeUnit} oFunctionBody Function code.","              */","             'function': function(","                 sIdentifier,","                 aFormalParameterList,","                 oFunctionBody) {","               if ('string' === typeof sIdentifier) {","                 fAddIdentifier(sIdentifier);","               }","               aFormalParameterList.forEach(fAddIdentifier);","             },","             /**","              * Either increments the count of the number of occurrences of the","              * encountered null or Boolean value or classifies a source element","              * as containing the {@code eval} identifier name.","              * @param {string} sIdentifier The identifier encountered.","              */","             'name': function(sIdentifier) {","               if (-1 !== A_OTHER_SUBSTITUTABLE_LITERALS.indexOf(sIdentifier)) {","                 fCountPrimaryExpression(","                     EPrimaryExpressionCategories.N_NULL_AND_BOOLEAN_LITERALS,","                     EValuePrefixes.S_SYMBOLIC + sIdentifier);","               } else {","                 if ('eval' === sIdentifier) {","                   oSourceElementData.nCategory =","                       ESourceElementCategories.N_EVAL;","                 }","                 fAddIdentifier(sIdentifier);","               }","             },","             /**","              * Classifies the source element as excludable if it does not","              * contain a {@code with} statement or the {@code eval} identifier","              * name.","              * @param {TSyntacticCodeUnit} oExpression The expression whose","              *     value is to be returned.","              */","             'return': function(oExpression) {","               fClassifyAsExcludable();","             },","             /**","              * Increments the count of the number of occurrences of the","              * encountered String value.","              * @param {string} sStringValue The String value of the string","              *     literal encountered.","              */","             'string': function(sStringValue) {","               if (sStringValue.length &gt; 0) {","                 fCountPrimaryExpression(","                     EPrimaryExpressionCategories.N_STRING_LITERALS,","                     EValuePrefixes.S_STRING + sStringValue);","               }","             },","             /**","              * Adds the identifier reserved for an exception to the list of","              * identifier names found.","              * @param {!TSyntacticCodeUnit} oTry A block of code in which an","              *     exception can occur.","              * @param {Array} aCatch The identifier reserved for an exception","              *     and a block of code to handle the exception.","              * @param {TSyntacticCodeUnit} oFinally An optional block of code","              *     to be evaluated regardless of whether an exception occurs.","              */","             'try': function(oTry, aCatch, oFinally) {","               if (Array.isArray(aCatch)) {","                 fAddIdentifier(aCatch[0]);","               }","             },","             /**","              * Classifies the source element as excludable if it does not","              * contain a {@code with} statement or the {@code eval} identifier","              * name. Adds the identifier of each declared variable to the list","              * of identifier names found.","              * @param {!Array.&lt;!Array&gt;} aVariableDeclarationList Variable","              *     declarations.","              */","             'var': function(aVariableDeclarationList) {","               fClassifyAsExcludable();","               aVariableDeclarationList.forEach(fAddVariable);","             },","             /**","              * Classifies a source element as containing the {@code with}","              * statement.","              * @param {!TSyntacticCodeUnit} oExpression An expression whose","              *     value is to be converted to a value of type Object and","              *     become the binding object of a new object environment","              *     record of a new lexical environment in which the statement","              *     is to be executed.","              * @param {!TSyntacticCodeUnit} oStatement The statement to be","              *     executed in the augmented lexical environment.","              * @return {!Array} An empty array to stop the traversal.","              */","             'with': function(oExpression, oStatement) {","               oSourceElementData.nCategory = ESourceElementCategories.N_WITH;","               return [];","             }","             /**#nocode-*/  // JsDoc Toolkit 2.4.0 hides some of the keys.","           },","           /**","            * A collection of functions used while looking for nested functions.","            * @namespace","            * @type {!Object.&lt;string, function(...[*])&gt;}","            */","           oExamineFunctions: {","             /**#nocode+*/  // JsDoc Toolkit 2.4.0 hides some of the keys.","             /**","              * Orders an examination of a nested function declaration.","              * @this {!TSyntacticCodeUnit} An array-like object representing","              *     the branch of an &lt;abbr title=\"abstract syntax tree\"","              *     &gt;AST&lt;/abbr&gt; representing the syntactic code unit along with","              *     its scope.","              * @return {!Array} An empty array to stop the traversal.","              */","             'defun': function() {","               fExamineSyntacticCodeUnit(this);","               return [];","             },","             /**","              * Orders an examination of a nested function expression.","              * @this {!TSyntacticCodeUnit} An array-like object representing","              *     the branch of an &lt;abbr title=\"abstract syntax tree\"","              *     &gt;AST&lt;/abbr&gt; representing the syntactic code unit along with","              *     its scope.","              * @return {!Array} An empty array to stop the traversal.","              */","             'function': function() {","               fExamineSyntacticCodeUnit(this);","               return [];","             }","             /**#nocode-*/  // JsDoc Toolkit 2.4.0 hides some of the keys.","           }","         },","         /**","          * Records containing data about source elements.","          * @type {Array.&lt;TSourceElementsData&gt;}","          */","         aSourceElementsData = [],","         /**","          * The index (in the source text order) of the source element","          * immediately following a &lt;a href=\"http://es5.github.com/#x14.1\"","          * &gt;Directive Prologue&lt;/a&gt;.","          * @type {number}","          */","         nAfterDirectivePrologue = 0,","         /**","          * The index (in the source text order) of the source element that is","          * currently being considered.","          * @type {number}","          */","         nPosition,","         /**","          * The index (in the source text order) of the source element that is","          * the last element of the range of source elements that is currently","          * being considered.","          * @type {(undefined|number)}","          */","         nTo,","         /**","          * Initiates the traversal of a source element.","          * @param {!TWalker} oWalker An instance of an object that allows the","          *     traversal of an abstract syntax tree.","          * @param {!TSyntacticCodeUnit} oSourceElement A source element from","          *     which the traversal should commence.","          * @return {function(): !TSyntacticCodeUnit} A function that is able to","          *     initiate the traversal from a given source element.","          */","         cContext = function(oWalker, oSourceElement) {","           /**","            * @return {!TSyntacticCodeUnit} A function that is able to","            *     initiate the traversal from a given source element.","            */","           var fLambda = function() {","             return oWalker.walk(oSourceElement);","           };","","           return fLambda;","         },","         /**","          * Classifies the source element as excludable if it does not","          * contain a {@code with} statement or the {@code eval} identifier","          * name.","          */","         fClassifyAsExcludable = function() {","           if (oSourceElementData.nCategory ===","               ESourceElementCategories.N_OTHER) {","             oSourceElementData.nCategory =","                 ESourceElementCategories.N_EXCLUDABLE;","           }","         },","         /**","          * Adds an identifier to the list of identifier names found.","          * @param {string} sIdentifier The identifier to be added.","          */","         fAddIdentifier = function(sIdentifier) {","           if (-1 === oSourceElementData.aIdentifiers.indexOf(sIdentifier)) {","             oSourceElementData.aIdentifiers.push(sIdentifier);","           }","         },","         /**","          * Adds the identifier of a variable to the list of identifier names","          * found.","          * @param {!Array} aVariableDeclaration A variable declaration.","          */","         fAddVariable = function(aVariableDeclaration) {","           fAddIdentifier(/** @type {string} */ aVariableDeclaration[0]);","         },","         /**","          * Increments the count of the number of occurrences of the prefixed","          * String representation attributed to the primary expression.","          * @param {number} nCategory The category of the primary expression.","          * @param {string} sName The prefixed String representation attributed","          *     to the primary expression.","          */","         fCountPrimaryExpression = function(nCategory, sName) {","           if (!oSourceElementData.aCount[nCategory].hasOwnProperty(sName)) {","             oSourceElementData.aCount[nCategory][sName] = 0;","             if (-1 === oSourceElementData.aPrimitiveValues.indexOf(sName)) {","               oSourceElementData.aPrimitiveValues.push(sName);","             }","           }","           oSourceElementData.aCount[nCategory][sName] += 1;","         },","         /**","          * Consolidates all worthwhile primitive values in a range of source","          *     elements.","          * @param {number} nFrom The index (in the source text order) of the","          *     source element that is the first element of the range.","          * @param {number} nTo The index (in the source text order) of the","          *     source element that is the last element of the range.","          * @param {boolean} bEnclose Indicates whether the range should be","          *     enclosed within a function call with no argument values to a","          *     function with an empty parameter list if any primitive values","          *     are consolidated.","          * @see TPrimitiveValue#nSaving","          */","         fExamineSourceElements = function(nFrom, nTo, bEnclose) {","           var _,","               /**","                * The index of the last mangled name.","                * @type {number}","                */","               nIndex = oScope.cname,","               /**","                * The index of the source element that is currently being","                * considered.","                * @type {number}","                */","               nPosition,","               /**","                * A collection of functions used during the consolidation of","                * primitive values and identifier names used as property","                * accessors.","                * @namespace","                * @type {!Object.&lt;string, function(...[*])&gt;}","                */","               oWalkersTransformers = {","                 /**","                  * If the String value that is equivalent to the sequence of","                  * terminal symbols that constitute the encountered identifier","                  * name is worthwhile, a syntactic conversion from the dot","                  * notation to the bracket notation ensues with that sequence","                  * being substituted by an identifier name to which the value","                  * is assigned.","                  * Applies to property accessors that use the dot notation.","                  * @param {!TSyntacticCodeUnit} oExpression The nonterminal","                  *     MemberExpression.","                  * @param {string} sIdentifierName The identifier name used as","                  *     the property accessor.","                  * @return {!Array} A syntactic code unit that is equivalent to","                  *     the one encountered.","                  * @see TPrimitiveValue#nSaving","                  */","                 'dot': function(oExpression, sIdentifierName) {","                   /**","                    * The prefixed String value that is equivalent to the","                    * sequence of terminal symbols that constitute the","                    * encountered identifier name.","                    * @type {string}","                    */","                   var sPrefixed = EValuePrefixes.S_STRING + sIdentifierName;","","                   return oSolutionBest.oPrimitiveValues.hasOwnProperty(","                       sPrefixed) &amp;&amp;","                       oSolutionBest.oPrimitiveValues[sPrefixed].nSaving &gt; 0 ?","                       ['sub',","                        oWalker.walk(oExpression),","                        ['name',","                         oSolutionBest.oPrimitiveValues[sPrefixed].sName]] :","                       ['dot', oWalker.walk(oExpression), sIdentifierName];","                 },","                 /**","                  * If the encountered identifier is a null or Boolean literal","                  * and its value is worthwhile, the identifier is substituted","                  * by an identifier name to which that value is assigned.","                  * Applies to identifier names.","                  * @param {string} sIdentifier The identifier encountered.","                  * @return {!Array} A syntactic code unit that is equivalent to","                  *     the one encountered.","                  * @see TPrimitiveValue#nSaving","                  */","                 'name': function(sIdentifier) {","                   /**","                    * The prefixed representation String of the identifier.","                    * @type {string}","                    */","                   var sPrefixed = EValuePrefixes.S_SYMBOLIC + sIdentifier;","","                   return [","                     'name',","                     oSolutionBest.oPrimitiveValues.hasOwnProperty(sPrefixed) &amp;&amp;","                     oSolutionBest.oPrimitiveValues[sPrefixed].nSaving &gt; 0 ?","                     oSolutionBest.oPrimitiveValues[sPrefixed].sName :","                     sIdentifier","                   ];","                 },","                 /**","                  * If the encountered String value is worthwhile, it is","                  * substituted by an identifier name to which that value is","                  * assigned.","                  * Applies to String values.","                  * @param {string} sStringValue The String value of the string","                  *     literal encountered.","                  * @return {!Array} A syntactic code unit that is equivalent to","                  *     the one encountered.","                  * @see TPrimitiveValue#nSaving","                  */","                 'string': function(sStringValue) {","                   /**","                    * The prefixed representation String of the primitive value","                    * of the literal.","                    * @type {string}","                    */","                   var sPrefixed =","                       EValuePrefixes.S_STRING + sStringValue;","","                   return oSolutionBest.oPrimitiveValues.hasOwnProperty(","                       sPrefixed) &amp;&amp;","                       oSolutionBest.oPrimitiveValues[sPrefixed].nSaving &gt; 0 ?","                       ['name',","                        oSolutionBest.oPrimitiveValues[sPrefixed].sName] :","                       ['string', sStringValue];","                 }","               },","               /**","                * Such data on what to consolidate within the range of source","                * elements that is currently being considered that lead to the","                * greatest known reduction of the number of the terminal symbols","                * in comparison to the original source text.","                * @type {!TSolution}","                */","               oSolutionBest = new TSolution(),","               /**","                * Data representing an ongoing attempt to find a better","                * reduction of the number of the terminal symbols in comparison","                * to the original source text than the best one that is","                * currently known.","                * @type {!TSolution}","                * @see oSolutionBest","                */","               oSolutionCandidate = new TSolution(),","               /**","                * A record consisting of data about the range of source elements","                * that is currently being examined.","                * @type {!TSourceElementsData}","                */","               oSourceElementsData = new TSourceElementsData(),","               /**","                * Variable declarations for each primitive value that is to be","                * consolidated within the elements.","                * @type {!Array.&lt;!Array&gt;}","                */","               aVariableDeclarations = [],","               /**","                * Augments a list with a prefixed representation String.","                * @param {!Array.&lt;string&gt;} aList A list that is to be augmented.","                * @return {function(string)} A function that augments a list","                *     with a prefixed representation String.","                */","               cAugmentList = function(aList) {","                 /**","                  * @param {string} sPrefixed Prefixed representation String of","                  *     a primitive value that could be consolidated within the","                  *     elements.","                  */","                 var fLambda = function(sPrefixed) {","                   if (-1 === aList.indexOf(sPrefixed)) {","                     aList.push(sPrefixed);","                   }","                 };","","                 return fLambda;","               },","               /**","                * Adds the number of occurrences of a primitive value of a given","                * category that could be consolidated in the source element with","                * a given index to the count of occurrences of that primitive","                * value within the range of source elements that is currently","                * being considered.","                * @param {number} nPosition The index (in the source text order)","                *     of a source element.","                * @param {number} nCategory The category of the primary","                *     expression from which the primitive value is derived.","                * @return {function(string)} A function that performs the","                *     addition.","                * @see cAddOccurrencesInCategory","                */","               cAddOccurrences = function(nPosition, nCategory) {","                 /**","                  * @param {string} sPrefixed The prefixed representation String","                  *     of a primitive value.","                  */","                 var fLambda = function(sPrefixed) {","                   if (!oSourceElementsData.aCount[nCategory].hasOwnProperty(","                           sPrefixed)) {","                     oSourceElementsData.aCount[nCategory][sPrefixed] = 0;","                   }","                   oSourceElementsData.aCount[nCategory][sPrefixed] +=","                       aSourceElementsData[nPosition].aCount[nCategory][","                           sPrefixed];","                 };","","                 return fLambda;","               },","               /**","                * Adds the number of occurrences of each primitive value of a","                * given category that could be consolidated in the source","                * element with a given index to the count of occurrences of that","                * primitive values within the range of source elements that is","                * currently being considered.","                * @param {number} nPosition The index (in the source text order)","                *     of a source element.","                * @return {function(number)} A function that performs the","                *     addition.","                * @see fAddOccurrences","                */","               cAddOccurrencesInCategory = function(nPosition) {","                 /**","                  * @param {number} nCategory The category of the primary","                  *     expression from which the primitive value is derived.","                  */","                 var fLambda = function(nCategory) {","                   Object.keys(","                       aSourceElementsData[nPosition].aCount[nCategory]","                   ).forEach(cAddOccurrences(nPosition, nCategory));","                 };","","                 return fLambda;","               },","               /**","                * Adds the number of occurrences of each primitive value that","                * could be consolidated in the source element with a given index","                * to the count of occurrences of that primitive values within","                * the range of source elements that is currently being","                * considered.","                * @param {number} nPosition The index (in the source text order)","                *     of a source element.","                */","               fAddOccurrences = function(nPosition) {","                 Object.keys(aSourceElementsData[nPosition].aCount).forEach(","                     cAddOccurrencesInCategory(nPosition));","               },","               /**","                * Creates a variable declaration for a primitive value if that","                * primitive value is to be consolidated within the elements.","                * @param {string} sPrefixed Prefixed representation String of a","                *     primitive value that could be consolidated within the","                *     elements.","                * @see aVariableDeclarations","                */","               cAugmentVariableDeclarations = function(sPrefixed) {","                 if (oSolutionBest.oPrimitiveValues[sPrefixed].nSaving &gt; 0) {","                   aVariableDeclarations.push([","                     oSolutionBest.oPrimitiveValues[sPrefixed].sName,","                     [0 === sPrefixed.indexOf(EValuePrefixes.S_SYMBOLIC) ?","                      'name' : 'string',","                      sPrefixed.substring(EValuePrefixes.S_SYMBOLIC.length)]","                   ]);","                 }","               },","               /**","                * Sorts primitive values with regard to the difference in the","                * number of terminal symbols between the original source text","                * and the one with those primitive values consolidated.","                * @param {string} sPrefixed0 The prefixed representation String","                *     of the first of the two primitive values that are being","                *     compared.","                * @param {string} sPrefixed1 The prefixed representation String","                *     of the second of the two primitive values that are being","                *     compared.","                * @return {number}","                *     &lt;dl&gt;","                *         &lt;dt&gt;-1&lt;/dt&gt;","                *         &lt;dd&gt;if the first primitive value must be placed before","                *              the other one,&lt;/dd&gt;","                *         &lt;dt&gt;0&lt;/dt&gt;","                *         &lt;dd&gt;if the first primitive value may be placed before","                *              the other one,&lt;/dd&gt;","                *         &lt;dt&gt;1&lt;/dt&gt;","                *         &lt;dd&gt;if the first primitive value must not be placed","                *              before the other one.&lt;/dd&gt;","                *     &lt;/dl&gt;","                * @see TSolution.oPrimitiveValues","                */","               cSortPrimitiveValues = function(sPrefixed0, sPrefixed1) {","                 /**","                  * The difference between:","                  * &lt;ol&gt;","                  * &lt;li&gt;the difference in the number of terminal symbols","                  *     between the original source text and the one with the","                  *     first primitive value consolidated, and&lt;/li&gt;","                  * &lt;li&gt;the difference in the number of terminal symbols","                  *     between the original source text and the one with the","                  *     second primitive value consolidated.&lt;/li&gt;","                  * &lt;/ol&gt;","                  * @type {number}","                  */","                 var nDifference =","                     oSolutionCandidate.oPrimitiveValues[sPrefixed0].nSaving -","                     oSolutionCandidate.oPrimitiveValues[sPrefixed1].nSaving;","","                 return nDifference &gt; 0 ? -1 : nDifference &lt; 0 ? 1 : 0;","               },","               /**","                * Assigns an identifier name to a primitive value and calculates","                * whether instances of that primitive value are worth","                * consolidating.","                * @param {string} sPrefixed The prefixed representation String","                *     of a primitive value that is being evaluated.","                */","               fEvaluatePrimitiveValue = function(sPrefixed) {","                 var _,","                     /**","                      * The index of the last mangled name.","                      * @type {number}","                      */","                     nIndex,","                     /**","                      * The representation String of the primitive value that is","                      * being evaluated.","                      * @type {string}","                      */","                     sName =","                         sPrefixed.substring(EValuePrefixes.S_SYMBOLIC.length),","                     /**","                      * The number of source characters taken up by the","                      * representation String of the primitive value that is","                      * being evaluated.","                      * @type {number}","                      */","                     nLengthOriginal = sName.length,","                     /**","                      * The number of source characters taken up by the","                      * identifier name that could substitute the primitive","                      * value that is being evaluated.","                      * substituted.","                      * @type {number}","                      */","                     nLengthSubstitution,","                     /**","                      * The number of source characters taken up by by the","                      * representation String of the primitive value that is","                      * being evaluated when it is represented by a string","                      * literal.","                      * @type {number}","                      */","                     nLengthString = oProcessor.make_string(sName).length;","","                 oSolutionCandidate.oPrimitiveValues[sPrefixed] =","                     new TPrimitiveValue();","                 do {  // Find an identifier unused in this or any nested scope.","                   nIndex = oScope.cname;","                   oSolutionCandidate.oPrimitiveValues[sPrefixed].sName =","                       oScope.next_mangled();","                 } while (-1 !== oSourceElementsData.aIdentifiers.indexOf(","                     oSolutionCandidate.oPrimitiveValues[sPrefixed].sName));","                 nLengthSubstitution = oSolutionCandidate.oPrimitiveValues[","                     sPrefixed].sName.length;","                 if (0 === sPrefixed.indexOf(EValuePrefixes.S_SYMBOLIC)) {","                   // foo:null, or foo:null;","                   oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving -=","                       nLengthSubstitution + nLengthOriginal +","                       oWeights.N_VARIABLE_DECLARATION;","                   // null vs foo","                   oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving +=","                       oSourceElementsData.aCount[","                           EPrimaryExpressionCategories.","                               N_NULL_AND_BOOLEAN_LITERALS][sPrefixed] *","                       (nLengthOriginal - nLengthSubstitution);","                 } else {","                   // foo:'fromCharCode';","                   oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving -=","                       nLengthSubstitution + nLengthString +","                       oWeights.N_VARIABLE_DECLARATION;","                   // .fromCharCode vs [foo]","                   if (oSourceElementsData.aCount[","                           EPrimaryExpressionCategories.N_IDENTIFIER_NAMES","                       ].hasOwnProperty(sPrefixed)) {","                     oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving +=","                         oSourceElementsData.aCount[","                             EPrimaryExpressionCategories.N_IDENTIFIER_NAMES","                         ][sPrefixed] *","                         (nLengthOriginal - nLengthSubstitution -","                          oWeights.N_PROPERTY_ACCESSOR);","                   }","                   // 'fromCharCode' vs foo","                   if (oSourceElementsData.aCount[","                           EPrimaryExpressionCategories.N_STRING_LITERALS","                       ].hasOwnProperty(sPrefixed)) {","                     oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving +=","                         oSourceElementsData.aCount[","                             EPrimaryExpressionCategories.N_STRING_LITERALS","                         ][sPrefixed] *","                         (nLengthString - nLengthSubstitution);","                   }","                 }","                 if (oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving &gt;","                     0) {","                   oSolutionCandidate.nSavings +=","                       oSolutionCandidate.oPrimitiveValues[sPrefixed].nSaving;","                 } else {","                   oScope.cname = nIndex; // Free the identifier name.","                 }","               },","               /**","                * Adds a variable declaration to an existing variable statement.","                * @param {!Array} aVariableDeclaration A variable declaration","                *     with an initialiser.","                */","               cAddVariableDeclaration = function(aVariableDeclaration) {","                 (/** @type {!Array} */ oSourceElements[nFrom][1]).unshift(","                     aVariableDeclaration);","               };","","           if (nFrom &gt; nTo) {","             return;","           }","           // If the range is a closure, reuse the closure.","           if (nFrom === nTo &amp;&amp;","               'stat' === oSourceElements[nFrom][0] &amp;&amp;","               'call' === oSourceElements[nFrom][1][0] &amp;&amp;","               'function' === oSourceElements[nFrom][1][1][0]) {","             fExamineSyntacticCodeUnit(oSourceElements[nFrom][1][1]);","             return;","           }","           // Create a list of all derived primitive values within the range.","           for (nPosition = nFrom; nPosition &lt;= nTo; nPosition += 1) {","             aSourceElementsData[nPosition].aPrimitiveValues.forEach(","                 cAugmentList(oSourceElementsData.aPrimitiveValues));","           }","           if (0 === oSourceElementsData.aPrimitiveValues.length) {","             return;","           }","           for (nPosition = nFrom; nPosition &lt;= nTo; nPosition += 1) {","             // Add the number of occurrences to the total count.","             fAddOccurrences(nPosition);","             // Add identifiers of this or any nested scope to the list.","             aSourceElementsData[nPosition].aIdentifiers.forEach(","                 cAugmentList(oSourceElementsData.aIdentifiers));","           }","           // Distribute identifier names among derived primitive values.","           do {  // If there was any progress, find a better distribution.","             oSolutionBest = oSolutionCandidate;","             if (Object.keys(oSolutionCandidate.oPrimitiveValues).length &gt; 0) {","               // Sort primitive values descending by their worthwhileness.","               oSourceElementsData.aPrimitiveValues.sort(cSortPrimitiveValues);","             }","             oSolutionCandidate = new TSolution();","             oSourceElementsData.aPrimitiveValues.forEach(","                 fEvaluatePrimitiveValue);","             oScope.cname = nIndex;","           } while (oSolutionCandidate.nSavings &gt; oSolutionBest.nSavings);","           // Take the necessity of adding a variable statement into account.","           if ('var' !== oSourceElements[nFrom][0]) {","             oSolutionBest.nSavings -= oWeights.N_VARIABLE_STATEMENT_AFFIXATION;","           }","           if (bEnclose) {","             // Take the necessity of forming a closure into account.","             oSolutionBest.nSavings -= oWeights.N_CLOSURE;","           }","           if (oSolutionBest.nSavings &gt; 0) {","             // Create variable declarations suitable for UglifyJS.","             Object.keys(oSolutionBest.oPrimitiveValues).forEach(","                 cAugmentVariableDeclarations);","             // Rewrite expressions that contain worthwhile primitive values.","             for (nPosition = nFrom; nPosition &lt;= nTo; nPosition += 1) {","               oWalker = oProcessor.ast_walker();","               oSourceElements[nPosition] =","                   oWalker.with_walkers(","                       oWalkersTransformers,","                       cContext(oWalker, oSourceElements[nPosition]));","             }","             if ('var' === oSourceElements[nFrom][0]) {  // Reuse the statement.","               (/** @type {!Array.&lt;!Array&gt;} */ aVariableDeclarations.reverse(","                   )).forEach(cAddVariableDeclaration);","             } else {  // Add a variable statement.","               Array.prototype.splice.call(","                   oSourceElements,","                   nFrom,","                   0,","                   ['var', aVariableDeclarations]);","               nTo += 1;","             }","             if (bEnclose) {","               // Add a closure.","               Array.prototype.splice.call(","                   oSourceElements,","                   nFrom,","                   0,","                   ['stat', ['call', ['function', null, [], []], []]]);","               // Copy source elements into the closure.","               for (nPosition = nTo + 1; nPosition &gt; nFrom; nPosition -= 1) {","                 Array.prototype.unshift.call(","                     oSourceElements[nFrom][1][1][3],","                     oSourceElements[nPosition]);","               }","               // Remove source elements outside the closure.","               Array.prototype.splice.call(","                   oSourceElements,","                   nFrom + 1,","                   nTo - nFrom + 1);","             }","           }","           if (bEnclose) {","             // Restore the availability of identifier names.","             oScope.cname = nIndex;","           }","         };","","     oSourceElements = (/** @type {!TSyntacticCodeUnit} */","         oSyntacticCodeUnit[bIsGlobal ? 1 : 3]);","     if (0 === oSourceElements.length) {","       return;","     }","     oScope = bIsGlobal ? oSyntacticCodeUnit.scope : oSourceElements.scope;","     // Skip a Directive Prologue.","     while (nAfterDirectivePrologue &lt; oSourceElements.length &amp;&amp;","            'directive' === oSourceElements[nAfterDirectivePrologue][0]) {","       nAfterDirectivePrologue += 1;","       aSourceElementsData.push(null);","     }","     if (oSourceElements.length === nAfterDirectivePrologue) {","       return;","     }","     for (nPosition = nAfterDirectivePrologue;","          nPosition &lt; oSourceElements.length;","          nPosition += 1) {","       oSourceElementData = new TSourceElementsData();","       oWalker = oProcessor.ast_walker();","       // Classify a source element.","       // Find its derived primitive values and count their occurrences.","       // Find all identifiers used (including nested scopes).","       oWalker.with_walkers(","           oWalkers.oSurveySourceElement,","           cContext(oWalker, oSourceElements[nPosition]));","       // Establish whether the scope is still wholly examinable.","       bIsWhollyExaminable = bIsWhollyExaminable &amp;&amp;","           ESourceElementCategories.N_WITH !== oSourceElementData.nCategory &amp;&amp;","           ESourceElementCategories.N_EVAL !== oSourceElementData.nCategory;","       aSourceElementsData.push(oSourceElementData);","     }","     if (bIsWhollyExaminable) {  // Examine the whole scope.","       fExamineSourceElements(","           nAfterDirectivePrologue,","           oSourceElements.length - 1,","           false);","     } else {  // Examine unexcluded ranges of source elements.","       for (nPosition = oSourceElements.length - 1;","            nPosition &gt;= nAfterDirectivePrologue;","            nPosition -= 1) {","         oSourceElementData = (/** @type {!TSourceElementsData} */","             aSourceElementsData[nPosition]);","         if (ESourceElementCategories.N_OTHER ===","             oSourceElementData.nCategory) {","           if ('undefined' === typeof nTo) {","             nTo = nPosition;  // Indicate the end of a range.","           }","           // Examine the range if it immediately follows a Directive Prologue.","           if (nPosition === nAfterDirectivePrologue) {","             fExamineSourceElements(nPosition, nTo, true);","           }","         } else {","           if ('undefined' !== typeof nTo) {","             // Examine the range that immediately follows this source element.","             fExamineSourceElements(nPosition + 1, nTo, true);","             nTo = void 0;  // Obliterate the range.","           }","           // Examine nested functions.","           oWalker = oProcessor.ast_walker();","           oWalker.with_walkers(","               oWalkers.oExamineFunctions,","               cContext(oWalker, oSourceElements[nPosition]));","         }","       }","     }","   }(oAbstractSyntaxTree = oProcessor.ast_add_scope(oAbstractSyntaxTree)));","  return oAbstractSyntaxTree;","};","/*jshint sub:false */","","/* Local Variables:      */","/* mode: js              */","/* coding: utf-8         */","/* indent-tabs-mode: nil */","/* tab-width: 2          */","/* End:                  */","/* vim: set ft=javascript fenc=utf-8 et ts=2 sts=2 sw=2: */","/* :mode=javascript:noTabs=true:tabSize=2:indentSize=2:deepIndent=true: */",""];
