Malicious PDF — malware analysis report

Static analysis result for SHA-256 1863a08cb2e4d91b…

MALICIOUS

PDF

213.2 KB Created: 2012-03-27 11:53:12 +02:00 Authoring application: swissforms Solutions First seen: 2015-09-29
MD5: 9139544178d2257c77b9d4e8e43f3cf0 SHA-1: deeb93cf6f4faf7bf5556b1bafb384454b4a6d81 SHA-256: 1863a08cb2e4d91b0d82739c3d56c2e1975f799b88bc57f61a8dd481d0d477b1
214 Risk Score

Malware Insights

MITRE ATT&CK
T1059.007 JavaScript T1566.001 Spearphishing Attachment T1041 Exfiltration Over C2 Channel

The PDF contains embedded JavaScript that utilizes functions like `unescape`, `String.fromCharCode`, and `eval`, indicating obfuscation and malicious intent. The heuristics strongly suggest credential exfiltration and heap spray behaviors. The document body contains fields related to financial declarations and tax forms, aligning with a phishing or fraud scheme. The embedded JavaScript likely attempts to exfiltrate data to the `http://pajhome.org.uk/crypt/md5` URL.

Machine Learning

  • Nyx PDF Classifier malicious score 0.6150

Heuristics 7

  • JavaScript action low 2 related findings PDF_JAVASCRIPT
    PDF contains a /JavaScript action. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • PDF JavaScript exploit cluster critical PDF_JS_EXPLOIT_CLUSTER
    PDF combines an executable JavaScript/action surface with exploit staging indicators such as eval/unescape/fromCharCode, XFA script content, or a related CVE pattern. Benign form JavaScript remains low-severity, but this correlated cluster is high-confidence malicious behavior.
    Matched line in script
                     var quarterString = eval("quarterContainer._" + quarter);
  • Embedded JS stream low PDF_JS
    PDF references a /JS stream. Generic JavaScript is common in benign forms; specific dangerous APIs are scored by separate rules.
  • Additional-actions dictionary low PDF_AA
    PDF defines /AA (Additional Actions) that references an executable action (JS/JavaScript/Launch/SubmitForm) — can auto-trigger on document or widget events. Form-field calc/format/validate/keystroke handlers in legitimate interactive forms commonly fire this, so it is reported as a low-weight signal; weaponised auto-execution is flagged by stronger rules (PDF_OPENACTION, encrypted-with-JS, etc.)
  • AcroForm button with action trigger low PDF_ACROFORM_BUTTON
    PDF contains a /Btn form field together with a SubmitForm/URI/Launch/JS trigger — this is the building block of fake 'Download' or 'Open' button overlays used in PDF phishing lures
  • Suspicious extracted artifact info EXTRACTED_FILE_STATIC_TRIAGE
    One or more files extracted from inside this sample matched static suspicious-content checks such as script obfuscation, encoded payload blobs, packed data, or execution/download terms.
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://pajhome.org.uk/crypt/md5 Referenced by PDF JavaScript
    • http://www.unicode.org/reports/tr35/tr35-11.html#Number_Format_PatternsReferenced by PDF JavaScript
    • http://www.unicode.org/reports/tr35/tr35-11.html#Lenient_ParsingReferenced by PDF JavaScript
    • http://unicode.org/reports/tr18/Referenced by PDF JavaScript

Extracted artifacts 31

Files carved from inside the sample during analysis.

FilenameKindSourceSize
javascript_obj0077_000.js pdf-javascript-stream PDF /JS object 77 at offset 0x1C07D 45 bytes
SHA-256: 033cfe2ae60e1528f65c10fad3d200ead3549102d1ab209f12b58088bf2f12f5
Preview script
First 1,000 lines of the extracted script
if(handleEvent!=undefined)handleEvent(event);
javascript_obj0001_004.js pdf-javascript-stream PDF /JS object 1 at offset 0xF 4875 bytes
SHA-256: 09cc9bcbd59acf82e2be4a41727eedce5a538a736f2d65749c8b14153d70c125
Preview script
First 1,000 lines of the extracted script
var cldr={
"supplemental_plurals":{
"zero":function(n) { return false; },
"one":function(n) { return n == 1; },
"two":function(n) { return false; },
"few":function(n) { return false; },
"many":function(n) { return false; }
},
"numbers_symbols":{
"decimal":",",
"group":".",
"list":";",
"nativeZeroDigit":"0",
"plusSign":"+",
"minusSign":"-",
"numberPattern":"#,##0.###",
"nan":"NaN",
"infinity":"\u221E"
},
"calendar_gregorian":{
"months_format":{
"abbreviated":{
"_1":"ene","_2":"feb","_3":"mar","_4":"abr","_5":"may","_6":"jun","_7":"jul","_8":"ago","_9":"sep","_10":"oct","_11":"nov","_12":"dic"
},
"wide":{
"_1":"enero","_2":"febrero","_3":"marzo","_4":"abril","_5":"mayo","_6":"junio","_7":"julio","_8":"agosto","_9":"septiembre","_10":"octubre","_11":"noviembre","_12":"diciembre"
},
"narrow":{
"_1":"E","_2":"F","_3":"M","_4":"A","_5":"M","_6":"J","_7":"J","_8":"A","_9":"S","_10":"O","_11":"N","_12":"D"
}
},
"months_stand_alone":{
"abbreviated":{
"_1":"ene","_2":"feb","_3":"mar","_4":"abr","_5":"may","_6":"jun","_7":"jul","_8":"ago","_9":"sep","_10":"oct","_11":"nov","_12":"dic"
},
"wide":{
"_1":"enero","_2":"febrero","_3":"marzo","_4":"abril","_5":"mayo","_6":"junio","_7":"julio","_8":"agosto","_9":"septiembre","_10":"octubre","_11":"noviembre","_12":"diciembre"
},
"narrow":{
"_1":"E","_2":"F","_3":"M","_4":"A","_5":"M","_6":"J","_7":"J","_8":"A","_9":"S","_10":"O","_11":"N","_12":"D"
}
},
"days_format":{
"abbreviated":{
"sun":"dom","mon":"lun","tue":"mar","wed":"mi\u00E9","thu":"jue","fri":"vie","sat":"s\u00E1b"
},
"wide":{
"sun":"domingo","mon":"lunes","tue":"martes","wed":"mi\u00E9rcoles","thu":"jueves","fri":"viernes","sat":"s\u00E1bado"
},
"narrow":{
"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"
}
},
"days_stand_alone":{
"abbreviated":{
"sun":"dom","mon":"lun","tue":"mar","wed":"mi\u00E9","thu":"jue","fri":"vie","sat":"s\u00E1b"
},
"wide":{
"sun":"domingo","mon":"lunes","tue":"martes","wed":"mi\u00E9rcoles","thu":"jueves","fri":"viernes","sat":"s\u00E1bado"
},
"narrow":{
"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"
}
},
"quarters_format":{
"abbreviated":{
"_1":"T1","_2":"T2","_3":"T3","_4":"T4"
},
"wide":{
"_1":"1er trimestre","_2":"2\u00BA trimestre","_3":"3er trimestre","_4":"4\u00BA trimestre"
},
"narrow":{
"_1":"1","_2":"2","_3":"3","_4":"4"
}
},
"quarters_stand_alone":{
"abbreviated":{
"_1":"T1","_2":"T2","_3":"T3","_4":"T4"
},
"wide":{
"_1":"1er trimestre","_2":"2\u00BA trimestre","_3":"3er trimestre","_4":"4\u00BA trimestre"
},
"narrow":{
"_1":"1","_2":"2","_3":"3","_4":"4"
}
},
"am":"a.m.",
"pm":"p.m.",
"eraNames":{"beforeChrist":"antes de Cristo","afterChrist":"anno D\u00F3mini"},
"eraAbbr":{"beforeChrist":"a.C.","afterChrist":"d.C."},
"eraNarrow":{"beforeChrist":"a.C.","afterChrist":"d.C."},
"relative_days":{
"_0":"hoy","_1":"ma\u00F1ana","_2":"pasado ma\u00F1ana","_-1":"ayer","_-2":"antes de ayer"
},
"months_all":{
"_1":["urtarrila","January","Xaneiro","gener","enero"],"_2":["otsaila","February","Febreiro","febrer","febrero"],"_3":["martxoa","March","Marzo","mar\u00E7","marzo"],"_4":["apirila","April","Abril","abril"],"_5":["maiatza","May","Maio","maig","mayo"],"_6":["ekaina","June","Xu\u00F1o","juny","junio"],"_7":["uztaila","July","Xullo","juliol","julio"],"_8":["abuztua","August","Agosto","agost","agosto"],"_9":["iraila","September","Setembro","setembre","septiembre"],"_10":["urria","October","Outubro","octubre"],"_11":["azaroa","November","Novembro","novembre","noviembre"],"_12":["abendua","December","Decembro","desembre","diciembre"]
},
"days_all":{
"sun":["igandea","Sunday","Domingo","diumenge","domingo"],"mon":["astelehena","Monday","Luns","dilluns","lunes"],"tue":["asteartea","Tuesday","Martes","dimarts","martes"],"wed":["asteazkena","Wednesday","M\u00E9rcores","dimecres","mi\u00E9rcoles"],"thu":["osteguna","Thursday","Xoves","dijous","jueves"],"fri":["ostirala","Friday","Venres","divendres","viernes"],"sat":["larunbata","Saturday","S\u00E1bado","dissabte","s\u00E1bado"]
},
"timeFormats":{
"short":"HH:mm",
"medium":"HH:mm:ss",
},
"dateFormats":{
"short":"dd/MM/yy",
"medium":"dd/MM/yyyy",
"long":"d 'de' MMMM 'de' yyyy",
"full":"EEEE d 'de' MMMM 'de' yyyy",
},
},
"timeZoneNames":{
"hourFormat":"+HH:mm;-HH:mm",
"gmtFormat":"GMT{0}",
},
"numbers_currencyFormats":{
"currencySpacing":{
"beforeCurrency":{
"currencyMatch":"[:letter:]",
"surroundingMatch":"[:digit:]",
"insertBetween":"\u00A0"
},
"afterCurrency":{
"currencyMatch":"[:letter:]",
"surroundingMatch":"[:digit:]",
"insertBetween":"\u00A0"
}
},
"unitPatterns":{
"other":"{0} {1}"

},
"currencyPattern":"\u00A4\u00A0#,##0.00"
},
"numbers_currencies":{
},
"supplemental_currencyData_fractions":{"DEFAULT":{"digits":2,"rounding":0},
}
}
javascript_obj0004_005.js pdf-javascript-stream PDF /JS object 4 at offset 0x680 17129 bytes
SHA-256: c2f9e45a2d3f7ffd224908e29db59dec89b6f57df138d3bb5892cfc8e5e92c26
Preview script
First 1,000 lines of the extracted script
var formProperties = new Array();
var CANCEL_EVENT = false;
var EMPTY = 0;
var VALID = 1;
var INVALID = 2;
var REQUIRED = 3;

var INVALIDITY_REASON_INPUT = 0;
var INVALIDITY_REASON_OTHER = 1;

var commitWithTab = false;
var tabTarget = "";
var nextFieldState = 0;
var tabOn = true;
var eventLevel = 0;
var backward = false;
var prevAcroField = null;
var possibleBackJump = false;
//var nextAcroField = null;
var submitForm_formatingBack = false;
var ignoreAllEvents = false;
var ignoreAllRules = false;
var fieldIdCached = new Array();
var CANCEL_CALCULATION = false;
var CALCULATE_RULES = false;
var CALCULATION_ONE_FILLED = false;
var CALCULATION_ALL_FILLED = false;
var CALCULATION_WITH_FIELD = false;
this.SWISSFORMS_FORM = true;

var openTime;

var IN_INIT = false;

var IGNORE_FORMAT_EVENT = false;

var CACHED_CB_GROUPS = new Array();

var printHiddenFieldOriginalDisplay = undefined;

var calculateCounter = 0;

if(app.runtimeHighlight)
{
	app.runtimeHighlight = false;
}

/// events

var eventRegister = new Object();

function registerEvent(eventName, fieldName, source)
{
	if(eventRegister[eventName] == undefined) eventRegister[eventName] = new Object();
	if(eventRegister[eventName][fieldName] == undefined) eventRegister[eventName][fieldName] = new Array();
	eventRegister[eventName][fieldName].push(source);
}

function handleEvent(event, withRules)
{
	if (ignoreAllEvents)
		return;
	
	var eventName = event.name;
	if (eventName == "Format" && IGNORE_FORMAT_EVENT)
		return;
	
	// optimization: don't blur or format hidden fields
	if ((eventName == "Format" || eventName == "Blur") && event.target != undefined)
	{
		if (event.target.hidden)
			return;
	}
	
	eventLevel++;
	
	/*if (eventName == "Calculate")
		console.println("Enter Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
	else
		console.println("Enter Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
	
	if(eventName == "Keystroke" && event.target != null && event.commitKey == 3 && eventLevel == 1)
	{
		//this.console.println("tab commit: " + event.target.name);

		// look up prev active field
		prevAcroField = tabOrderB[event.target.name];
		var pField = this.getField(prevAcroField);
		while(pField != null && (pField.display == 1 || pField.display == 3 || pField.readonly))
		{
			prevAcroField = tabOrderB[prevAcroField];
			pField = this.getField(prevAcroField);
		}

		/*// look up prev active field
		nextAcroField = tabOrder[event.target.name];
		var nField = this.getField(nextAcroField);
		while(nField != null && (nField.display == 1 || nField.display == 3 || nField.readonly))
		{
			nextAcroField = tabOrder[nextAcroField];
			nField = this.getField(nextAcroField);
		}*/

		commitWithTab = true;
		tabTarget = event.target.name;
		nextFieldState = event.target.display;
	}


	if(eventRegister[eventName] == undefined)
	{
		if(eventName == "Calculate")
		{
			calculateFields(event);
		}
		
		/*if (eventName == "Calculate")
			console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
		else
			console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
			
		eventLevel--;
		return;
	}
	var registeredEvent = eventRegister[eventName];
	if(registeredEvent[event.target.name] == undefined)
	{
		/*if (eventName == "Calculate")
			console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
		else
			console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
			
		eventLevel--;
		return;
	}
	var fieldName = event.target.name;
	CANCEL_EVENT = false;
	for(var i = 0; i < registeredEvent[fieldName].length; i++)
	{
		if(!CANCEL_EVENT)
		{
			registeredEvent[fieldName][i](event);
		}
		else break;
	}

	//if(withRules != 1) doRules(event);

	if(eventName == "Calculate")
	{
		calculateFields(event);
	}

	//////////////// ACHTUNG
	
	if(possibleBackJump && eventName == "Focus" && eventLevel == 1)
	{
		if(event.target.name == prevAcroField)
		{
			var nextFieldName = tabOrderB[tabTarget];

			var name = nextFieldName;
			var field2 = this.getField(name);

			while(field2 != null && (field2.display == 1 || field2.display == 3 || field2.readonly))
			{
				name = tabOrderB[name];
				field2 = this.getField(name);
			}

			field2.setFocus();
		}
	}
	else if(possibleBackJump && eventName == "Blur" && tabTarget == event.target.name && eventLevel == 1)
	{
		;
		// do nothing
	}
	else if(possibleBackJump && eventLevel == 1)
	{
		possibleBackJump = false;
	}

	/*if (eventName == "Calculate")
		console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
	else
		console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
	
	eventLevel--;
}

function getFieldById(id)
{
	if (fieldIdCached[id] != undefined)
	{
		return fieldIdCached[id];
	}
	else
	{
		var name = fieldIdNameMapping[""+id];
		if (name == undefined) return undefined;
		var field = this.getField(name);
		if (field == undefined) return undefined;
		fieldIdCached[id] = field;
		return field;
		return undefined;
	}
}

function doRules(rulesArr)
{
	if(rules != undefined)
	{
		if (!ignoreAllRules)
		{
			rulesArr.sort();
			for(var i = 0; i < rulesArr.length; i ++)
			{
				var rule = rules[rulesArr[i]];
				CALCULATE_RULES = true;
				var complied = Boolean(rule["condition"]());
				if(complied)
				{
					if(rule["trueActions"] != undefined)
					{
						for(var j = 0; j < rule["trueActions"].length; j++)
						{
							tabOn = false;
							rule["trueActions"][j]();
							tabOn = true;
						}
					}
				}
				else
				{
					if(rule["falseActions"] != undefined)
					{
						for(var j = 0; j < rule["falseActions"].length; j++)
						{
							tabOn = false;
							rule["falseActions"][j]();
							tabOn = true;
						}
					}
				}
			}
		}
		//this.console.println("setFocus: " + event.target.name + " level: " + eventLevel);

		if(commitWithTab && tabOn && eventLevel == 1)
		{
			var nextFieldName = tabOrder[tabTarget];
			var name = nextFieldName;
			var field2 = this.getField(name);

			while(field2 != null && (field2.display == 1 || field2.display == 3 || field2.readonly))
			{
				name = tabOrder[name];
				field2 = this.getField(name);
			}

			field2.setFocus();
			possibleBackJump = true;
			commitWithTab = false;
		}
	}
}

function customValidateAllFieldsWithBlur(fieldName)
{
	if(fields[fieldName] != undefined && fields[fieldName]["validations"] != undefined)
	{
		for(var i = 0; i < fields[fieldName]["validations"].length; i++)
		{
			var fName = fields[fieldName]["validations"][i];
			var field = this.getField(fName);

			if(field != undefined)
			{
				generateOnlyValidateEvent(field);
				var dummyEvent = new Object();
				dummyEvent.target = field;
				dummyEvent.name = "Blur";
				handleEvent(dummyEvent);
			}
		}
	}
}

function customValidateAllFields(fieldName)
{
	if(fields[fieldName] != undefined && fields[fieldName]["validations"] != undefined)
	{
		for(var i = 0; i < fields[fieldName]["validations"].length; i++)
		{
			var fName = fields[fieldName]["validations"][i];
			var field = this.getField(fName);

			if(field != undefined)
			{
				generateOnlyValidateEvent(field);
			}
		}
	}
}

function calculateFields(event)
{
	if (event.source == undefined) return;
	var currFieldName = event.source.name;
	
	customValidateAllFieldsWithBlur(currFieldName);
	if (fields[currFieldName] == undefined) return;
	
	var fieldId = fields[currFieldName]["id"];
	var currIndex = calcTreeEntryMapping[fieldId+""];
	
	var rulesArr = new Array();
	if (currIndex != -1 && currIndex != undefined)
	{
		var first = true;
	
		while (currIndex != -1 && currIndex != undefined)
		{
			if (flatCalcTree[currIndex] == undefined) break;
			var field = getFieldById(flatCalcTree[currIndex].fieldId);
			if(field != undefined && first == false)
			{
				var changed = calculateField(field);
				if (changed)
					customValidateAllFieldsWithBlur(field.name);
			}
			
			for(var i = 0; i < fields[field.name]["rules"].length; i++)
			{
				var rule = fields[field.name]["rules"][i];
				rulesArr.push(rule);
			}
			
			currIndex = flatCalcTree[currIndex].next;
			first = false;
		}
	}
	else
	{
		for(var i = 0; i < fields[event.source.name]["rules"].length; i++)
		{
			var rule = fields[event.source.name]["rules"][i];
			rulesArr.push(rule);
		}
	}
	
	
	// execute rules sorted in next event for that the rules can change the actual edited value
	doRules(rulesArr);
}

function calculateField(field)
{
	var changedValue = false;
	if(fields[field.name]["expression"] != undefined)
	{	
		CANCEL_CALCULATION = false;
		CALCULATE_RULES = false;
		CALCULATION_ONE_FILLED = false;
		CALCULATION_ALL_FILLED = true;
		CALCULATION_WITH_FIELD = false;
		
		var evaluated = fields[field.name]["expression"]();
		if (CANCEL_CALCULATION)
		{
			if (field.value != "")
			{
				field.value = "";
				changedValue = true;
			}
		}
		
		else if (CALCULATION_WITH_FIELD == true &&
				((fields[field.name]["expressionBehavior"] == 0 && CALCULATION_ALL_FILLED == false) || (fields[field.name]["expressionBehavior"] == 1 && CALCULATION_ONE_FILLED == false)))
		{
			// handle behavior if empty fields
			if (field.value != "")
			{
				field.value = "";
				changedValue = true;
			}
		}
		else
		{
			var newValue;
			if (typeof(evaluated) == 'number')
				newValue = formatNumber(evaluated, "0.#########");
			else
				newValue = evaluated;
				
			if (newValue != field.value)
			{
				field.value = newValue;
				changedValue = true;
			}
		}
	}
	return changedValue;
}

function generateDoRules(field)
{
	var rulesArr = new Array();
	for(var i = 0; i < fields[field.name]["rules"].length; i++)
	{
		var rule = fields[field.name]["rules"][i];
		rulesArr.push(rule);
	}
	doRules(rulesArr);
}

function arrayContains(arr, val)
{
	for(var i = 0; i < arr.length; i++)
	{
		if(arr[i] == val) return true;
	}

	return false;
}

function generateBlurEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.value;
	dummyEvent.target = field;
	dummyEvent.name = "Blur";
	handleEvent(dummyEvent);
}

function generateValidateEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.value;
	
	generateOnlyValidateEvent(field);
	dummyEvent.target = field;
	dummyEvent.name = "Calculate";
	dummyEvent.source = field;
	handleEvent(dummyEvent)
	calculateField(field);
	dummyEvent.name = "Blur";
	handleEvent(dummyEvent);
}

function generateOnlyValidateEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.valueAsString;
	// take the display value for combobox fields
	if (field.type == "combobox")
	{
		var index = field.currentValueIndices;
		
		if (index != -1)
		{
			var name = field.getItemAt(index, false);
			if (name != undefined)
				fieldValue = name;
		}
	}
	
	dummyEvent.name = "Validate";
	dummyEvent.target = field;
	dummyEvent.value = fieldValue;
	handleEvent(dummyEvent);
	
	// set field value if validate has changed value
	if (dummyEvent.value+"" != fieldValue+"")
	{
		ignoreAllEvents = true;
		field.value = dummyEvent.value;
		ignoreAllEvents = false;
	}
	else if (field.type != "combobox")
	{
		ignoreAllEvents = true;
		field.value = field.valueAsString;
		ignoreAllEvents = false;
	}
}

function javascriptsLoaded()
{
	openTime = new Date();
	initForm();
}

function initForm(dontFocusFirstField)
{
	//this.delay = true;
	this.calculate = false;
	IN_INIT = true;

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			if (field.type != "checkbox")
			{
				generateOnlyValidateEvent(field);
			}
			else
			{
				// only validate check box group one time
				if (fields[field.name] != undefined && fields[field.name]["cbGroup"] != undefined && fields[field.name]["cbGroup"] != "")
				{
					var cbGroup = fields[field.name]["cbGroup"];
					if (CACHED_CB_GROUPS[cbGroup] == undefined)
						CACHED_CB_GROUPS[cbGroup] = new Array();
					
					CACHED_CB_GROUPS[cbGroup].push(field);
				}
				else
					generateOnlyValidateEvent(field);
			}
		}
	}
	
	// validate check box groups
	for (var group in CACHED_CB_GROUPS)
	{
		if (validateCbGroup != undefined)
		{
			validateCbGroup(CACHED_CB_GROUPS[group], undefined);
		}
	}

	for (var i = 0; i < openCalcOrderList.length; i ++)
	{
		var fieldId = openCalcOrderList[i];
		var field = getFieldById(fieldId);
		if (field == undefined) continue;
		
		ignoreAllEvents = true;
		var changed = calculateField(field);
		ignoreAllEvents = false;
		if (changed)
		{
			generateOnlyValidateEvent(field);
			customValidateAllFields(field.name);
		}
	}

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			generateDoRules(field);
			if (field.type != "checkbox")
				generateBlurEvent(field);
			else
			{
				if (!(fields[field.name] != undefined && fields[field.name]["cbGroup"] != undefined && fields[field.name]["cbGroup"] != ""))
					generateBlurEvent(field);
			}
		}
	}
	
	IN_INIT = false;

	if (dontFocusFirstField == undefined || dontFocusFirstField == false)
		focusFirstField();
	
	this.calculate = true;
	//this.delay = false;
}

function focusFirstField()
{
	var firstFieldName = formProperties["firstField"];

	if(fields[firstFieldName] != undefined)
	{
		var field = this.getField(firstFieldName);

		if(field != undefined)
		{
			field.setFocus();
		}
	}
}

function willPrint()
{
	for(var k in fields)
	{
		var field = this.getField(k);
		field.fillColor = fields[field.name]["backgroundColor"];
	}
	
	ignoreAllEvents = true;
	for(var k in fields)
	{
		var field = this.getField(k);
		
		if (fields[k]["_empty"] == true && fields[k]["nullText"] != undefined && fields[k]["nullText"] != "")
		{
			field.value = "";
		}
	}
	ignoreAllEvents = false;
	
	var formEmpty = isFormEmpty();
	
	var generateDm = false;
	if (!formEmpty)
	{
		generateDm = true;
		
		var result = checkForm();
		if(result != undefined)
		{
			if (!formProperties.alwaysAllowPrint)
			{
				if (formProperties.printShowMessage)
				{
					app.alert(formProperties.printShowMessageText);
				}
				if (formProperties.printShowHiddenField && formProperties.printHiddenField != undefined && formProperties.printHiddenField != "")
				{
					var field = getField(formProperties.printHiddenField);
					if (field != undefined)
					{
						printHiddenFieldOriginalDisplay = field.display;
						field.display = display.noView;
					}
				}
			}
			result.setFocus();
			
			generateDm = formProperties.printGenerateDataMatrix;
		}
	}
	
	if(dmArray.length > 0)
	{
		if (generateDm == true)
			calcBarcode(dmArray);
		else
			clearBarcode(dmArray);
	}
	
	ignoreAllEvents = true;
}

function didPrint()
{
	ignoreAllEvents = false;
	
	var dummyEvent = new Object();

	// null text
	for(var k in fields)
	{
		var field = this.getField(k);
		if (fields[k]["_empty"] == true && fields[k]["nullText"] != undefined && fields[k]["nullText"] != "")
		{
			field.value = "";
		}
	}

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			dummyEvent.target = field;
			dummyEvent.value = field.value;
			dummyEvent.name = "Blur";
			handleEvent(dummyEvent);
		}
	}
	
	if (!formProperties.alwaysAllowPrint)
	{
		if (formProperties.printShowHiddenField && formProperties.printHiddenField != undefined && formProperties.printHiddenField != "" && printHiddenFieldOriginalDisplay != undefined)
		{
			var field = getField(formProperties.printHiddenField);
			if (field != undefined)
			{
				field.display = printHiddenFieldOriginalDisplay;
			}
		}
	}
	
	printHiddenFieldOriginalDisplay = undefined;
}

function checkForm()
{
	for(var k in tabOrder)
	{
		if(fields[k]["validity"] == INVALID)
		{
			var field = this.getField(k);

			if(field.display == display.visible || field.display == display.noPrint)
			{
				return field;
			}
		}

		if(fields[k]["_empty"] == true && fields[k]["required"])
		{
			var field = this.getField(k);

			if(field.display == display.visible || field.display == display.noPrint)
			{
				return field;
			}
		}
	}

	return undefined;
}

function isFormEmpty()
{
	for(var k in fields)
	{
		var field = this.getField(k);
		if (field.valueAsString != field.defaultValue && !field.readonly)
		{
			return false;
		}
	}
	
	return true;
}

// iPDF Reader Importer
function dataHasImported(event)
{
	if (event.value == "imported")
	{
		initForm();
	}
}
javascript_obj0006_006.js pdf-javascript-stream PDF /JS object 6 at offset 0x1508 21193 bytes
SHA-256: 157d94c4373fc7674528b2b92bd73c7fb605ba41abc50f521589bd013af87b68
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
/* Rijndael (AES) Encryption
 * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de
 * version 1.0, check www.haneWIN.de for the latest version

 * This software is provided as-is, without express or implied warranty.  
 * Permission to use, copy, modify, distribute or sell this software, with or
 * without fee, for any purpose and by any individual or organization, is hereby
 * granted, provided that the above copyright notice and this paragraph appear 
 * in all copies. Distribution as a part of an application or binary must
 * include the above copyright notice in the documentation and/or other materials
 * provided with the application or distribution.
 */

function AES_init(){}

var blockSizeInBits = 128;
var keySizeInBits = 128;

// The round constants used in subkey expansion
var Rcon = [ 
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 
0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 
0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ];

// Precomputed lookup table for the SBox
var S = [
 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 
118, 202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 
114, 192, 183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 
216,  49,  21,   4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 
235,  39, 178, 117,   9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 
179,  41, 227,  47, 132,  83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 
190,  57,  74,  76,  88, 207, 208, 239, 170, 251,  67,  77,  51, 133,  69, 
249,   2, 127,  80,  60, 159, 168,  81, 163,  64, 143, 146, 157,  56, 245, 
188, 182, 218,  33,  16, 255, 243, 210, 205,  12,  19, 236,  95, 151,  68,  
23,  196, 167, 126,  61, 100,  93,  25, 115,  96, 129,  79, 220,  34,  42, 
144, 136,  70, 238, 184,  20, 222,  94,  11, 219, 224,  50,  58,  10,  73,
  6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121, 231, 200,  55, 109, 
141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8, 186, 120,  37,  
 46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138, 112,  62, 
181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158, 225,
248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  
 22 ];

var T1 = [
0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c ];

var T2 = [
0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d,
0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154,
0x30306050, 0x01010203, 0x6767cea9, 0x2b2b567d,
0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a,
0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87,
0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b,
0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea,
0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b,
0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a,
0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f,
0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908,
0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f,
0x0404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e,
0x18183028, 0x969637a1, 0x05050a0f, 0x9a9a2fb5,
0x07070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d,
0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f,
0x0909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e,
0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb,
0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce,
0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397,
0x5353a6f5, 0xd1d1b968, 0x00000000, 0xededc12c,
0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed,
0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b,
0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a,
0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16,
0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194,
0x45458acf, 0xf9f9e910, 0x02020406, 0x7f7ffe81,
0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3,
0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a,
0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104,
0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263,
0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d,
0xcdcd814c, 0x0c0c1814, 0x13132635, 0xececc32f,
0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39,
0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47,
0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695,
0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f,
0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83,
0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c,
0xdedea779, 0x5e5ebce2, 0x0b0b161d, 0xdbdbad76,
0xe0e0db3b, 0x32326456, 0x3a3a744e, 0x0a0a141e,
0x494992db, 0x06060c0a, 0x2424486c, 0x5c5cb8e4,
0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6,
0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b,
0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7,
0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0,
0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25,
0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x08081018,
0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72,
0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751,
0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21,
0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85,
0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa,
0x484890d8, 0x03030605, 0xf6f6f701, 0x0e0e1c12,
0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0,
0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9,
0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233,
0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7,
0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920,
0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a,
0x8c8c038f, 0xa1a159f8, 0x89890980, 0x0d0d1a17,
0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8,
0x414182c3, 0x999929b0, 0x2d2d5a77, 0x0f0f1e11,
0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a ];

var T3 = [
0x63c6a563, 0x7cf8847c, 0x77ee9977, 0x7bf68d7b,
0xf2ff0df2, 0x6bd6bd6b, 0x6fdeb16f, 0xc59154c5,
0x30605030, 0x01020301, 0x67cea967, 0x2b567d2b,
0xfee719fe, 0xd7b562d7, 0xab4de6ab, 0x76ec9a76,
0xca8f45ca, 0x821f9d82, 0xc98940c9, 0x7dfa877d,
0xfaef15fa, 0x59b2eb59, 0x478ec947, 0xf0fb0bf0,
0xad41ecad, 0xd4b367d4, 0xa25ffda2, 0xaf45eaaf,
0x9c23bf9c, 0xa453f7a4, 0x72e49672, 0xc09b5bc0,
0xb775c2b7, 0xfde11cfd, 0x933dae93, 0x264c6a26,
0x366c5a36, 0x3f7e413f, 0xf7f502f7, 0xcc834fcc,
0x34685c34, 0xa551f4a5, 0xe5d134e5, 0xf1f908f1,
0x71e29371, 0xd8ab73d8, 0x31625331, 0x152a3f15,
0x04080c04, 0xc79552c7, 0x23466523, 0xc39d5ec3,
0x18302818, 0x9637a196, 0x050a0f05, 0x9a2fb59a,
0x070e0907, 0x12243612, 0x801b9b80, 0xe2df3de2,
0xebcd26eb, 0x274e6927, 0xb27fcdb2, 0x75ea9f75,
0x09121b09, 0x831d9e83, 0x2c58742c, 0x1a342e1a,
0x1b362d1b, 0x6edcb26e, 0x5ab4ee5a, 0xa05bfba0,
0x52a4f652, 0x3b764d3b, 0xd6b761d6, 0xb37dceb3,
0x29527b29, 0xe3dd3ee3, 0x2f5e712f, 0x84139784,
0x53a6f553, 0xd1b968d1, 0x00000000, 0xedc12ced,
0x20406020, 0xfce31ffc, 0xb179c8b1, 0x5bb6ed5b,
0x6ad4be6a, 0xcb8d46cb, 0xbe67d9be, 0x39724b39,
0x4a94de4a, 0x4c98d44c, 0x58b0e858, 0xcf854acf,
0xd0bb6bd0, 0xefc52aef, 0xaa4fe5aa, 0xfbed16fb,
0x4386c543, 0x4d9ad74d, 0x33665533, 0x85119485,
0x458acf45, 0xf9e910f9, 0x02040602, 0x7ffe817f,
0x50a0f050, 0x3c78443c, 0x9f25ba9f, 0xa84be3a8,
0x51a2f351, 0xa35dfea3, 0x4080c040, 0x8f058a8f,
0x923fad92, 0x9d21bc9d, 0x38704838, 0xf5f104f5,
0xbc63dfbc, 0xb677c1b6, 0xdaaf75da, 0x21426321,
0x10203010, 0xffe51aff, 0xf3fd0ef3, 0xd2bf6dd2,
0xcd814ccd, 0x0c18140c, 0x13263513, 0xecc32fec,
0x5fbee15f, 0x9735a297, 0x4488cc44, 0x172e3917,
0xc49357c4, 0xa755f2a7, 0x7efc827e, 0x3d7a473d,
0x64c8ac64, 0x5dbae75d, 0x19322b19, 0x73e69573,
0x60c0a060, 0x81199881, 0x4f9ed14f, 0xdca37fdc,
0x22446622, 0x2a547e2a, 0x903bab90, 0x880b8388,
0x468cca46, 0xeec729ee, 0xb86bd3b8, 0x14283c14,
0xdea779de, 0x5ebce25e, 0x0b161d0b, 0xdbad76db,
0xe0db3be0, 0x32645632, 0x3a744e3a, 0x0a141e0a,
0x4992db49, 0x060c0a06, 0x24486c24, 0x5cb8e45c,
0xc29f5dc2, 0xd3bd6ed3, 0xac43efac, 0x62c4a662,
0x9139a891, 0x9531a495, 0xe4d337e4, 0x79f28b79,
0xe7d532e7, 0xc88b43c8, 0x376e5937, 0x6ddab76d,
0x8d018c8d, 0xd5b164d5, 0x4e9cd24e, 0xa949e0a9,
0x6cd8b46c, 0x56acfa56, 0xf4f307f4, 0xeacf25ea,
0x65caaf65, 0x7af48e7a, 0xae47e9ae, 0x08101808,
0xba6fd5ba, 0x78f08878, 0x254a6f25, 0x2e5c722e,
0x1c38241c, 0xa657f1a6, 0xb473c7b4, 0xc69751c6,
0xe8cb23e8, 0xdda17cdd, 0x74e89c74, 0x1f3e211f,
0x4b96dd4b, 0xbd61dcbd, 0x8b0d868b, 0x8a0f858a,
0x70e09070, 0x3e7c423e, 0xb571c4b5, 0x66ccaa66,
0x4890d848, 0x03060503, 0xf6f701f6, 0x0e1c120e,
0x61c2a361, 0x356a5f35, 0x57aef957, 0xb969d0b9,
0x86179186, 0xc19958c1, 0x1d3a271d, 0x9e27b99e,
0xe1d938e1, 0xf8eb13f8, 0x982bb398, 0x11223311,
0x69d2bb69, 0xd9a970d9, 0x8e07898e, 0x9433a794,
0x9b2db69b, 0x1e3c221e, 0x87159287, 0xe9c920e9,
0xce8749ce, 0x55aaff55, 0x28507828, 0xdfa57adf,
0x8c038f8c, 0xa159f8a1, 0x89098089, 0x0d1a170d,
0xbf65dabf, 0xe6d731e6, 0x4284c642, 0x68d0b868,
0x4182c341, 0x9929b099, 0x2d5a772d, 0x0f1e110f,
0xb07bcbb0, 0x54a8fc54, 0xbb6dd6bb, 0x162c3a16 ];

var T4 = [
0xc6a56363, 0xf8847c7c, 0xee997777, 0xf68d7b7b,
0xff0df2f2, 0xd6bd6b6b, 0xdeb16f6f, 0x9154c5c5,
0x60503030, 0x02030101, 0xcea96767, 0x567d2b2b,
0xe719fefe, 0xb562d7d7, 0x4de6abab, 0xec9a7676,
0x8f45caca, 0x1f9d8282, 0x8940c9c9, 0xfa877d7d,
0xef15fafa, 0xb2eb5959, 0x8ec94747, 0xfb0bf0f0,
0x41ecadad, 0xb367d4d4, 0x5ffda2a2, 0x45eaafaf,
0x23bf9c9c, 0x53f7a4a4, 0xe4967272, 0x9b5bc0c0,
0x75c2b7b7, 0xe11cfdfd, 0x3dae9393, 0x4c6a2626,
0x6c5a3636, 0x7e413f3f, 0xf502f7f7, 0x834fcccc,
0x685c3434, 0x51f4a5a5, 0xd134e5e5, 0xf908f1f1,
0xe2937171, 0xab73d8d8, 0x62533131, 0x2a3f1515,
0x080c0404, 0x9552c7c7, 0x46652323, 0x9d5ec3c3,
0x30281818, 0x37a19696, 0x0a0f0505, 0x2fb59a9a,
0x0e090707, 0x24361212, 0x1b9b8080, 0xdf3de2e2,
0xcd26ebeb, 0x4e692727, 0x7fcdb2b2, 0xea9f7575,
0x121b0909, 0x1d9e8383, 0x58742c2c, 0x342e1a1a,
0x362d1b1b, 0xdcb26e6e, 0xb4ee5a5a, 0x5bfba0a0,
0xa4f65252, 0x764d3b3b, 0xb761d6d6, 0x7dceb3b3,
0x527b2929, 0xdd3ee3e3, 0x5e712f2f, 0x13978484,
0xa6f55353, 0xb968d1d1, 0x00000000, 0xc12ceded,
0x40602020, 0xe31ffcfc, 0x79c8b1b1, 0xb6ed5b5b,
0xd4be6a6a, 0x8d46cbcb, 0x67d9bebe, 0x724b3939,
0x94de4a4a, 0x98d44c4c, 0xb0e85858, 0x854acfcf,
0xbb6bd0d0, 0xc52aefef, 0x4fe5aaaa, 0xed16fbfb,
0x86c54343, 0x9ad74d4d, 0x66553333, 0x11948585,
0x8acf4545, 0xe910f9f9, 0x04060202, 0xfe817f7f,
0xa0f05050, 0x78443c3c, 0x25ba9f9f, 0x4be3a8a8,
0xa2f35151, 0x5dfea3a3, 0x80c04040, 0x058a8f8f,
0x3fad9292, 0x21bc9d9d, 0x70483838, 0xf104f5f5,
0x63dfbcbc, 0x77c1b6b6, 0xaf75dada, 0x42632121,
0x20301010, 0xe51affff, 0xfd0ef3f3, 0xbf6dd2d2,
0x814ccdcd, 0x18140c0c, 0x26351313, 0xc32fecec,
0xbee15f5f, 0x35a29797, 0x88cc4444, 0x2e391717,
0x9357c4c4, 0x55f2a7a7, 0xfc827e7e, 0x7a473d3d,
0xc8ac6464, 0xbae75d5d, 0x322b1919, 0xe6957373,
0xc0a06060, 0x19988181, 0x9ed14f4f, 0xa37fdcdc,
0x44662222, 0x547e2a2a, 0x3bab9090, 0x0b838888,
0x8cca4646, 0xc729eeee, 0x6bd3b8b8, 0x283c1414,
0xa779dede, 0xbce25e5e, 0x161d0b0b, 0xad76dbdb,
0xdb3be0e0, 0x64563232, 0x744e3a3a, 0x141e0a0a,
0x92db4949, 0x0c0a0606, 0x486c2424, 0xb8e45c5c,
0x9f5dc2c2, 0xbd6ed3d3, 0x43efacac, 0xc4a66262,
0x39a89191, 0x31a49595, 0xd337e4e4, 0xf28b7979,
0xd532e7e7, 0x8b43c8c8, 0x6e593737, 0xdab76d6d,
0x018c8d8d, 0xb164d5d5, 0x9cd24e4e, 0x49e0a9a9,
0xd8b46c6c, 0xacfa5656, 0xf307f4f4, 0xcf25eaea,
0xcaaf6565, 0xf48e7a7a, 0x47e9aeae, 0x10180808,
0x6fd5baba, 0xf0887878, 0x4a6f2525, 0x5c722e2e,
0x38241c1c, 0x57f1a6a6, 0x73c7b4b4, 0x9751c6c6,
0xcb23e8e8, 0xa17cdddd, 0xe89c7474, 0x3e211f1f,
0x96dd4b4b, 0x61dcbdbd, 0x0d868b8b, 0x0f858a8a,
0xe0907070, 0x7c423e3e, 0x71c4b5b5, 0xccaa6666,
0x90d84848, 0x06050303, 0xf701f6f6, 0x1c120e0e,
0xc2a36161, 0x6a5f3535, 0xaef95757, 0x69d0b9b9,
0x17918686, 0x9958c1c1, 0x3a271d1d, 0x27b99e9e,
0xd938e1e1, 0xeb13f8f8, 0x2bb39898, 0x22331111,
0xd2bb6969, 0xa970d9d9, 0x07898e8e, 0x33a79494,
0x2db69b9b, 0x3c221e1e, 0x15928787, 0xc920e9e9,
0x8749cece, 0xaaff5555, 0x50782828, 0xa57adfdf,
0x038f8c8c, 0x59f8a1a1, 0x09808989, 0x1a170d0d,
0x65dabfbf, 0xd731e6e6, 0x84c64242, 0xd0b86868,
0x82c34141, 0x29b09999, 0x5a772d2d, 0x1e110f0f,
0x7bcbb0b0, 0xa8fc5454, 0x6dd6bbbb, 0x2c3a1616 ];

function B0(x) { return (x&255); }
function B1(x) { return ((x>>8)&255); }
function B2(x) { return ((x>>16)&255); }
function B3(x) { return ((x>>24)&255); }

function packBytes(octets)
{
  var i, j;
  var len=octets.length;
  var b=new Array(len/4);

  if (!octets || len % 4) return;

  for (i=0, j=0; j<len; j+= 4)
     b[i++] = octets[j] | (octets[j+1]<<8) | (octets[j+2]<<16) | (octets[j+3]<<24);

  return b;  
}

function unpackBytes(packed)
{
  var j;
  var i=0, l = packed.length;
  var r = new Array(l*4);

  for (j=0; j<l; j++)
  {
    r[i++] = B0(packed[j]);
    r[i++] = B1(packed[j]);
    r[i++] = B2(packed[j]);
    r[i++] = B3(packed[j]);
  }
  return r;
}

// ------------------------------------------------

var maxkc=8;
var maxrk=14;

function keyExpansion(key)
{
  var kc, i, j, r, t;
  var rounds;
  var keySched=new Array(maxrk+1);
  var keylen=key.length;
  var k=new Array(maxkc);
  var tk=new Array(maxkc);
  var rconpointer=0;

  if(keylen==16)
  {
   rounds=10;
   kc=4;
  }
  else if(keylen==24)
  {
   rounds=12;
   kc=6
  }
  else if(keylen==32)
  {
   rounds=14;
   kc=8
  }
  else
  {
   alert('Invalid key length '+keylen);
   return;
  }

  for(i=0; i<maxrk+1; i++) keySched[i]=new Array(4);

  for(i=0,j=0; j<keylen; j++,i+=4)
    k[j] = key[i] | (key[i+1]<<8)
                     | (key[i+2]<<16) | (key[i+3]<<24);

  for(j=kc-1; j>=0; j--) tk[j] = k[j];

  r=0;
  t=0;
  for(j=0; (j<kc)&&(r<rounds+1); )
  {
    for(; (j<kc)&&(t<4); j++,t++)
    {
      keySched[r][t]=tk[j];
    }
    if(t==4)
    {
      r++;
      t=0;
    }
  }

  while(r<rounds+1)
  {
    var temp = tk[kc-1];

    tk[0] ^= S[B1(temp)] | (S[B2(temp)]<<8) | (S[B3(temp)]<<16) | (S[B0(temp)]<<24);
    tk[0] ^= Rcon[rconpointer++];

    if(kc != 8)
    {
      for(j=1; j<kc; j++) tk[j] ^= tk[j-1];
    }
    else
    {
      for(j=1; j<kc/2; j++) tk[j] ^= tk[j-1];
 
      temp = tk[kc/2-1];
      tk[kc/2] ^= S[B0(temp)] | (S[B1(temp)]<<8) | (S[B2(temp)]<<16) | (S[B3(temp)]<<24);

      for(j=kc/2+1; j<kc; j++) tk[j] ^= tk[j-1];
    }

    for(j=0; (j<kc)&&(r<rounds+1); )
    {
      for(; (j<kc)&&(t<4); j++,t++)
      {
        keySched[r][t]=tk[j];
      }
      if(t==4)
      {
        r++;
        t=0;
      }
    }
  }
  this.rounds = rounds;
  this.rk = keySched;
  return this;
}

function AESencrypt(block, ctx)
{
  var r;
  var temp=new Array(4);

  var b = packBytes(block);
  var rounds = ctx.rounds;

  for(r=0; r<rounds-1; r++)
  {
    temp[0] = b[0] ^ ctx.rk[r][0];
    temp[1] = b[1] ^ ctx.rk[r][1];
    temp[2] = b[2] ^ ctx.rk[r][2];
    temp[3] = b[3] ^ ctx.rk[r][3];

    b[0] = T1[B0(temp[0])] ^ T2[B1(temp[1])] ^ T3[B2(temp[2])] ^ T4[B3(temp[3])];
    b[1] = T1[B0(temp[1])] ^ T2[B1(temp[2])] ^ T3[B2(temp[3])] ^ T4[B3(temp[0])];
    b[2] = T1[B0(temp[2])] ^ T2[B1(temp[3])] ^ T3[B2(temp[0])] ^ T4[B3(temp[1])];
    b[3] = T1[B0(temp[3])] ^ T2[B1(temp[0])] ^ T3[B2(temp[1])] ^ T4[B3(temp[2])];
  }

  // last round is special
  r = rounds-1;

  temp[0] = b[0] ^ ctx.rk[r][0];
  temp[1] = b[1] ^ ctx.rk[r][1];
  temp[2] = b[2] ^ ctx.rk[r][2];
  temp[3] = b[3] ^ ctx.rk[r][3];

  b[0] = B1(T1[B0(temp[0])]) | (B1(T1[B1(temp[1])])<<8) | (B1(T1[B2(temp[2])])<<16) | (B1(T1[B3(temp[3])])<<24);
  b[1] = B1(T1[B0(temp[1])]) | (B1(T1[B1(temp[2])])<<8) | (B1(T1[B2(temp[3])])<<16) | (B1(T1[B3(temp[0])])<<24);
  b[2] = B1(T1[B0(temp[2])]) | (B1(T1[B1(temp[3])])<<8) | (B1(T1[B2(temp[0])])<<16) | (B1(T1[B3(temp[1])])<<24);
  b[3] = B1(T1[B0(temp[3])]) | (B1(T1[B1(temp[0])])<<8) | (B1(T1[B2(temp[1])])<<16) | (B1(T1[B3(temp[2])])<<24);
  
  b[0] ^= ctx.rk[rounds][0];
  b[1] ^= ctx.rk[rounds][1];
  b[2] ^= ctx.rk[rounds][2];
  b[3] ^= ctx.rk[rounds][3];

  return unpackBytes(b);
}

// This function takes a prospective plaintext (string or array of bytes)
// and pads it with zero bytes if its length is not a multiple of the block 
// size. If plaintext is a string, it is converted to an array of bytes
// in the process. The type checking can be made much nicer using the 
// instanceof operator, but this operator is not available until IE5.0 so I 
// chose to use the heuristic below. 

function formatPlaintext(plaintext) {
  var bpb = blockSizeInBits / 8;               // bytes per block
  var i;

  // if primitive string or String instance
  if (typeof plaintext == "string" || plaintext.indexOf) {
	plaintext = unescape(encodeURIComponent(plaintext));
    plaintext = plaintext.split("");
    // Unicode issues here (ignoring high byte)
    for (i=0; i<plaintext.length; i++)
    {
		plaintext[i] = plaintext[i].charCodeAt(0) & 0xFF;
    }
  } 

  for (i = bpb - (plaintext.length % bpb); i > 0 && i < bpb; i--) 
    plaintext[plaintext.length] = 0;
  
  return plaintext;
}


// rijndaelEncrypt(plaintext, key, mode)
// Encrypts the plaintext using the given key and in the given mode. 
// The parameter "plaintext" can either be a string or an array of bytes. 
// The parameter "key" must be an array of key bytes. If you have a hex 
// string representing the key, invoke hexToByteArray() on it to convert it 
// to an array of bytes. The third parameter "mode" is a string indicating
// the encryption mode to use, either "ECB" or "CBC". If the parameter is
// omitted, ECB is assumed.
// 
// An array of bytes representing the cihpertext is returned. To convert 
// this array to hex, invoke byteArrayToHex() on it. If you are using this 
// "for real" it is a good idea to change the function getRandomBytes() to 
// something that returns truly random bits.

function rijndaelEncrypt(plaintext, key, mode, iv, thermometer, start, factor) {
  var i, aBlock;
  var bpb = blockSizeInBits / 8;          // bytes per block
  var ct;                                 // ciphertext

  if (!plaintext || !key)
    return;
  if (key.length*8 != keySizeInBits)
    return; 
  if (mode == "CBC")
    ct = iv;             // get IV
  else {
    mode = "ECB";
    ct = new Array();
  }

  // convert plaintext to byte array and pad with zeros if necessary. 
  plaintext = formatPlaintext(plaintext);

  var expandedKey = new keyExpansion(key);
  var numBlocks = plaintext.length / bpb;
  
  for (var block=0; block < numBlocks; block++) {
    aBlock = plaintext.slice(block*bpb, (block+1)*bpb);
    if (mode == "CBC")
      for (var i=0; i<bpb; i++) 
        aBlock[i] ^= ct[block*bpb + i];
    ct = ct.concat(AESencrypt(aBlock, expandedKey));
    
    if (thermometer != undefined)
    	thermometer.value = block / numBlocks * factor + start;
  }

  return ct;
}
javascript_obj0008_007.js pdf-javascript-stream PDF /JS object 8 at offset 0x36E8 33138 bytes
SHA-256: e6148b768af5b12460cf3e62fbab899b427b7493847763e208cddbfbe94685cd
Preview script
First 1,000 lines of the extracted script
// Copyright (c) 2005  Tom Wu
// All Rights Reserved.
// See "LICENSE" for details.

// Basic JavaScript BN library - subset useful for RSA encryption.
function BigInt_init(){}
// Bits per digit
var dbits;

// JavaScript engine analysis
var canary = 0xdeadbeefcafe;
var j_lm = ((canary&0xffffff)==0xefcafe);

// (public) Constructor
function BigInteger(a,b,c) {
  if(a != null)
    if("number" == typeof a) this.fromNumber(a,b,c);
    else if(b == null && "string" != typeof a) this.fromString(a,256);
    else this.fromString(a,b);
}

// return new, unset BigInteger
function nbi() { return new BigInteger(null); }

// am: Compute w_j += (x*this_i), propagate carries,
// c is initial carry, returns final carry.
// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
// We need to select the fastest one that works in this environment.

// am1: use a single mult and divide to get the high bits,
// max digit bits should be 26 because
// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
function am1(i,x,w,j,c,n) {
  while(--n >= 0) {
    var v = x*this[i++]+w[j]+c;
    c = Math.floor(v/0x4000000);
    w[j++] = v&0x3ffffff;
  }
  return c;
}
// am2 avoids a big mult-and-extract completely.
// Max digit bits should be <= 30 because we do bitwise ops
// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
function am2(i,x,w,j,c,n) {
  var xl = x&0x7fff, xh = x>>15;
  while(--n >= 0) {
    var l = this[i]&0x7fff;
    var h = this[i++]>>15;
    var m = xh*l+h*xl;
    l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
    c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
    w[j++] = l&0x3fffffff;
  }
  return c;
}
// Alternately, set max digit bits to 28 since some
// browsers slow down when dealing with 32-bit numbers.
function am3(i,x,w,j,c,n) {
  var xl = x&0x3fff, xh = x>>14;
  while(--n >= 0) {
    var l = this[i]&0x3fff;
    var h = this[i++]>>14;
    var m = xh*l+h*xl;
    l = xl*l+((m&0x3fff)<<14)+w[j]+c;
    c = (l>>28)+(m>>14)+xh*h;
    w[j++] = l&0xfffffff;
  }
  return c;
}
//if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
  //BigInteger.prototype.am = am2;
  //dbits = 30;
//}
//Else if(j_lm && (navigator.appName != "Netscape")) {
  //BigInteger.prototype.am = am1;
  //dbits = 26;
//}
//Else { // Mozilla/Netscape seems to prefer am3
  BigInteger.prototype.am = am3;
  dbits = 28;
//}

BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = ((1<<dbits)-1);
BigInteger.prototype.DV = (1<<dbits);

var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2,BI_FP);
BigInteger.prototype.F1 = BI_FP-dbits;
BigInteger.prototype.F2 = 2*dbits-BI_FP;

// Digit conversions
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array();
var rr,vv;
rr = "0".charCodeAt(0);
for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
rr = "a".charCodeAt(0);
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
rr = "A".charCodeAt(0);
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;

function int2char(n) { return BI_RM.charAt(n); }
function intAt(s,i) {
  var c = BI_RC[s.charCodeAt(i)];
  return (c==null)?-1:c;
}

// (protected) copy this to r
function bnpCopyTo(r) {
  for(var i = this.t-1; i >= 0; --i) r[i] = this[i];
  r.t = this.t;
  r.s = this.s;
}

// (protected) set from integer value x, -DV <= x < DV
function bnpFromInt(x) {
  this.t = 1;
  this.s = (x<0)?-1:0;
  if(x > 0) this[0] = x;
  else if(x < -1) this[0] = x+DV;
  else this.t = 0;
}

// return bigint initialized to value
function nbv(i) { var r = nbi(); r.fromInt(i); return r; }

// (protected) set from string and radix
function bnpFromString(s,b) {
  var k;
  if(b == 16) k = 4;
  else if(b == 8) k = 3;
  else if(b == 256) k = 8; // byte array
  else if(b == 2) k = 1;
  else if(b == 32) k = 5;
  else if(b == 4) k = 2;
  else { this.fromRadix(s,b); return; }
  this.t = 0;
  this.s = 0;
  var i = s.length, mi = false, sh = 0;
  while(--i >= 0) {
    var x = (k==8)?s[i]&0xff:intAt(s,i);
    if(x < 0) {
      if(s.charAt(i) == "-") mi = true;
      continue;
    }
    mi = false;
    if(sh == 0)
      this[this.t++] = x;
    else if(sh+k > this.DB) {
      this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;
      this[this.t++] = (x>>(this.DB-sh));
    }
    else
      this[this.t-1] |= x<<sh;
    sh += k;
    if(sh >= this.DB) sh -= this.DB;
  }
  /*if(k == 8 && (s[0]&0x80) != 0) {
    this.s = -1;
    if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;
  }*/
  this.clamp();
  if(mi) BigInteger.ZERO.subTo(this,this);
}

// (protected) clamp off excess high words
function bnpClamp() {
  var c = this.s&this.DM;
  while(this.t > 0 && this[this.t-1] == c) --this.t;
}

// (public) return string representation in given radix
function bnToString(b) {
  if(this.s < 0) return "-"+this.negate().toString(b);
  var k;
  if(b == 16) k = 4;
  else if(b == 8) k = 3;
  else if(b == 2) k = 1;
  else if(b == 32) k = 5;
  else if(b == 4) k = 2;
  else return this.toRadix(b);
  var km = (1<<k)-1, d, m = false, r = "", i = this.t;
  var p = this.DB-(i*this.DB)%k;
  if(i-- > 0) {
    if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }
    while(i >= 0) {
      if(p < k) {
        d = (this[i]&((1<<p)-1))<<(k-p);
        d |= this[--i]>>(p+=this.DB-k);
      }
      else {
        d = (this[i]>>(p-=k))&km;
        if(p <= 0) { p += this.DB; --i; }
      }
      if(d > 0) m = true;
      if(m) r += int2char(d);
    }
  }
  return m?r:"0";
}

// (public) -this
function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }

// (public) |this|
function bnAbs() { return (this.s<0)?this.negate():this; }

// (public) return + if this > a, - if this < a, 0 if equal
function bnCompareTo(a) {
  var r = this.s-a.s;
  if(r != 0) return r;
  var i = this.t;
  r = i-a.t;
  if(r != 0) return r;
  while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
  return 0;
}

// returns bit length of the integer x
function nbits(x) {
  var r = 1, t;
  if((t=x>>>16) != 0) { x = t; r += 16; }
  if((t=x>>8) != 0) { x = t; r += 8; }
  if((t=x>>4) != 0) { x = t; r += 4; }
  if((t=x>>2) != 0) { x = t; r += 2; }
  if((t=x>>1) != 0) { x = t; r += 1; }
  return r;
}

// (public) return the number of bits in "this"
function bnBitLength() {
  if(this.t <= 0) return 0;
  return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
}

// (protected) r = this << n*DB
function bnpDLShiftTo(n,r) {
  var i;
  for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
  for(i = n-1; i >= 0; --i) r[i] = 0;
  r.t = this.t+n;
  r.s = this.s;
}

// (protected) r = this >> n*DB
function bnpDRShiftTo(n,r) {
  for(var i = n; i < this.t; ++i) r[i-n] = this[i];
  r.t = Math.max(this.t-n,0);
  r.s = this.s;
}

// (protected) r = this << n
function bnpLShiftTo(n,r) {
  var bs = n%this.DB;
  var cbs = this.DB-bs;
  var bm = (1<<cbs)-1;
  var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;
  for(i = this.t-1; i >= 0; --i) {
    r[i+ds+1] = (this[i]>>cbs)|c;
    c = (this[i]&bm)<<bs;
  }
  for(i = ds-1; i >= 0; --i) r[i] = 0;
  r[ds] = c;
  r.t = this.t+ds+1;
  r.s = this.s;
  r.clamp();
}

// (protected) r = this >> n
function bnpRShiftTo(n,r) {
  r.s = this.s;
  var ds = Math.floor(n/this.DB);
  if(ds >= this.t) { r.t = 0; return; }
  var bs = n%this.DB;
  var cbs = this.DB-bs;
  var bm = (1<<bs)-1;
  r[0] = this[ds]>>bs;
  for(var i = ds+1; i < this.t; ++i) {
    r[i-ds-1] |= (this[i]&bm)<<cbs;
    r[i-ds] = this[i]>>bs;
  }
  if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;
  r.t = this.t-ds;
  r.clamp();
}

// (protected) r = this - a
function bnpSubTo(a,r) {
  var i = 0, c = 0, m = Math.min(a.t,this.t);
  while(i < m) {
    c += this[i]-a[i];
    r[i++] = c&this.DM;
    c >>= this.DB;
  }
  if(a.t < this.t) {
    c -= a.s;
    while(i < this.t) {
      c += this[i];
      r[i++] = c&this.DM;
      c >>= this.DB;
    }
    c += this.s;
  }
  else {
    c += this.s;
    while(i < a.t) {
      c -= a[i];
      r[i++] = c&this.DM;
      c >>= this.DB;
    }
    c -= a.s;
  }
  r.s = (c<0)?-1:0;
  if(c < -1) r[i++] = this.DV+c;
  else if(c > 0) r[i++] = c;
  r.t = i;
  r.clamp();
}

// (protected) r = this * a, r != this,a (HAC 14.12)
// "this" should be the larger one if appropriate.
function bnpMultiplyTo(a,r) {
  var x = this.abs(), y = a.abs();
  var i = x.t;
  r.t = i+y.t;
  while(--i >= 0) r[i] = 0;
  for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);
  r.s = 0;
  r.clamp();
  if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
}

// (protected) r = this^2, r != this (HAC 14.16)
function bnpSquareTo(r) {
  var x = this.abs();
  var i = r.t = 2*x.t;
  while(--i >= 0) r[i] = 0;
  for(i = 0; i < x.t-1; ++i) {
    var c = x.am(i,x[i],r,2*i,0,1);
    if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {
      r[i+x.t] -= x.DV;
      r[i+x.t+1] = 1;
    }
  }
  if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);
  r.s = 0;
  r.clamp();
}

// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
// r != q, this != m.  q or r may be null.
function bnpDivRemTo(m,q,r) {
  var pm = m.abs();
  if(pm.t <= 0) return;
  var pt = this.abs();
  if(pt.t < pm.t) {
    if(q != null) q.fromInt(0);
    if(r != null) this.copyTo(r);
    return;
  }
  if(r == null) r = nbi();
  var y = nbi(), ts = this.s, ms = m.s;
  var nsh = this.DB-nbits(pm[pm.t-1]);	// normalize modulus
  if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
  else { pm.copyTo(y); pt.copyTo(r); }
  var ys = y.t;
  var y0 = y[ys-1];
  if(y0 == 0) return;
  var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);
  var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;
  var i = r.t, j = i-ys, t = (q==null)?nbi():q;
  y.dlShiftTo(j,t);
  if(r.compareTo(t) >= 0) {
    r[r.t++] = 1;
    r.subTo(t,r);
  }
  BigInteger.ONE.dlShiftTo(ys,t);
  t.subTo(y,y);	// "negative" y so we can replace sub with am later
  while(y.t < ys) y[y.t++] = 0;
  while(--j >= 0) {
    // Estimate quotient digit
    var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);
    if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) {	// Try it out
      y.dlShiftTo(j,t);
      r.subTo(t,r);
      while(r[i] < --qd) r.subTo(t,r);
    }
  }
  if(q != null) {
    r.drShiftTo(ys,q);
    if(ts != ms) BigInteger.ZERO.subTo(q,q);
  }
  r.t = ys;
  r.clamp();
  if(nsh > 0) r.rShiftTo(nsh,r);	// Denormalize remainder
  if(ts < 0) BigInteger.ZERO.subTo(r,r);
}

// (public) this mod a
function bnMod(a) {
  var r = nbi();
  this.abs().divRemTo(a,null,r);
  if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
  return r;
}

// Modular reduction using "classic" algorithm
function Classic(m) { this.m = m; }
function cConvert(x) {
  if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
  else return x;
}
function cRevert(x) { return x; }
function cReduce(x) { x.divRemTo(this.m,null,x); }
function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;

// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
// justification:
//         xy == 1 (mod m)
//         xy =  1+km
//   xy(2-xy) = (1+km)(1-km)
// x[y(2-xy)] = 1-k^2m^2
// x[y(2-xy)] == 1 (mod m^2)
// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
// JS multiply "overflows" differently from C/C++, so care is needed here.
function bnpInvDigit() {
  if(this.t < 1) return 0;
  var x = this[0];
  if((x&1) == 0) return 0;
  var y = x&3;		// y == 1/x mod 2^2
  y = (y*(2-(x&0xf)*y))&0xf;	// y == 1/x mod 2^4
  y = (y*(2-(x&0xff)*y))&0xff;	// y == 1/x mod 2^8
  y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;	// y == 1/x mod 2^16
  // last step - calculate inverse mod DV directly;
  // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
  y = (y*(2-x*y%this.DV))%this.DV;		// y == 1/x mod 2^dbits
  // we really want the negative inverse, and -DV < y < DV
  return (y>0)?this.DV-y:-y;
}

// Montgomery reduction
function Montgomery(m) {
  this.m = m;
  this.mp = m.invDigit();
  this.mpl = this.mp&0x7fff;
  this.mph = this.mp>>15;
  this.um = (1<<(m.DB-15))-1;
  this.mt2 = 2*m.t;
}

// xR mod m
function montConvert(x) {
  var r = nbi();
  x.abs().dlShiftTo(this.m.t,r);
  r.divRemTo(this.m,null,r);
  if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
  return r;
}

// x/R mod m
function montRevert(x) {
  var r = nbi();
  x.copyTo(r);
  this.reduce(r);
  return r;
}

// x = x/R mod m (HAC 14.32)
function montReduce(x) {
  while(x.t <= this.mt2)	// pad x so am has enough room later
    x[x.t++] = 0;
  for(var i = 0; i < this.m.t; ++i) {
    // faster way of calculating u0 = x[i]*mp mod DV
    var j = x[i]&0x7fff;
    var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;
    // use am to combine the multiply-shift-add into one call
    j = i+this.m.t;
    x[j] += this.m.am(0,u0,x,i,0,this.m.t);
    // propagate carry
    while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }
  }
  x.clamp();
  x.drShiftTo(this.m.t,x);
  if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
}

// r = "x^2/R mod m"; x != r
function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

// r = "xy/R mod m"; x,y != r
function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }

Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;

// (protected) true iff this is even
function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }

// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
function bnpExp(e,z) {
  if(e > 0xffffffff || e < 1) return BigInteger.ONE;
  var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
  g.copyTo(r);
  while(--i >= 0) {
    z.sqrTo(r,r2);
    if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
    else { var t = r; r = r2; r2 = t; }
  }
  return z.revert(r);
}

// (public) this^e % m, 0 <= e < 2^32
function bnModPowInt(e,m) {
  var z;
  if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
  return this.exp(e,z);
}

// protected
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;

// public
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;

// "constants"
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);





// Copyright (c) 2005  Tom Wu
// All Rights Reserved.
// See "LICENSE" for details.

// Extended JavaScript BN functions, required for RSA private ops.

// (public)
function bnClone() { var r = nbi(); this.copyTo(r); return r; }

// (public) return value as integer
function bnIntValue() {
  if(this.s < 0) {
    if(this.t == 1) return this[0]-this.DV;
    else if(this.t == 0) return -1;
  }
  else if(this.t == 1) return this[0];
  else if(this.t == 0) return 0;
  // assumes 16 < DB < 32
  return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];
}

// (public) return value as byte
function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }

// (public) return value as short (assumes DB>=16)
function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }

// (protected) return x s.t. r^x < DV
function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }

// (public) 0 if this == 0, 1 if this > 0
function bnSigNum() {
  if(this.s < 0) return -1;
  else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;
  else return 1;
}

// (protected) convert to radix string
function bnpToRadix(b) {
  if(b == null) b = 10;
  if(this.signum() == 0 || b < 2 || b > 36) return "0";
  var cs = this.chunkSize(b);
  var a = Math.pow(b,cs);
  var d = nbv(a), y = nbi(), z = nbi(), r = "";
  this.divRemTo(d,y,z);
  while(y.signum() > 0) {
    r = (a+z.intValue()).toString(b).substr(1) + r;
    y.divRemTo(d,y,z);
  }
  return z.intValue().toString(b) + r;
}

// (protected) convert from radix string
function bnpFromRadix(s,b) {
  this.fromInt(0);
  if(b == null) b = 10;
  var cs = this.chunkSize(b);
  var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
  for(var i = 0; i < s.length; ++i) {
    var x = intAt(s,i);
    if(x < 0) {
      if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
      continue;
    }
    w = b*w+x;
    if(++j >= cs) {
      this.dMultiply(d);
      this.dAddOffset(w,0);
      j = 0;
      w = 0;
    }
  }
  if(j > 0) {
    this.dMultiply(Math.pow(b,j));
    this.dAddOffset(w,0);
  }
  if(mi) BigInteger.ZERO.subTo(this,this);
}

// (protected) alternate constructor
function bnpFromNumber(a,b,c) {
  if("number" == typeof b) {
    // new BigInteger(int,int,RNG)
    if(a < 2) this.fromInt(1);
    else {
      this.fromNumber(a,c);
      if(!this.testBit(a-1))	// force MSB set
        this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
      if(this.isEven()) this.dAddOffset(1,0); // force odd
      while(!this.isProbablePrime(b)) {
        this.dAddOffset(2,0);
        if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
      }
    }
  }
  else {
    // new BigInteger(int,RNG)
    var x = new Array(), t = a&7;
    x.length = (a>>3)+1;
    b.nextBytes(x);
    if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
    this.fromString(x,256);
  }
}

// (public) convert to bigendian byte array
function bnToByteArray() {
  var i = this.t, r = new Array();
  r[0] = this.s;
  var p = this.DB-(i*this.DB)%8, d, k = 0;
  if(i-- > 0) {
    if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)
      r[k++] = d|(this.s<<(this.DB-p));
    while(i >= 0) {
      if(p < 8) {
        d = (this[i]&((1<<p)-1))<<(8-p);
        d |= this[--i]>>(p+=this.DB-8);
      }
      else {
        d = (this[i]>>(p-=8))&0xff;
        if(p <= 0) { p += this.DB; --i; }
      }
      if((d&0x80) != 0) d |= -256;
      if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
      if(k > 0 || d != this.s) r[k++] = d;
    }
  }
  return r;
}

function bnEquals(a) { return(this.compareTo(a)==0); }
function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
function bnMax(a) { return(this.compareTo(a)>0)?this:a; }

// (protected) r = this op a (bitwise)
function bnpBitwiseTo(a,op,r) {
  var i, f, m = Math.min(a.t,this.t);
  for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);
  if(a.t < this.t) {
    f = a.s&this.DM;
    for(i = m; i < this.t; ++i) r[i] = op(this[i],f);
    r.t = this.t;
  }
  else {
    f = this.s&this.DM;
    for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
    r.t = a.t;
  }
  r.s = op(this.s,a.s);
  r.clamp();
}

// (public) this & a
function op_and(x,y) { return x&y; }
function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }

// (public) this | a
function op_or(x,y) { return x|y; }
function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }

// (public) this ^ a
function op_xor(x,y) { return x^y; }
function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }

// (public) this & ~a
function op_andnot(x,y) { return x&~y; }
function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }

// (public) ~this
function bnNot() {
  var r = nbi();
  for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
  r.t = this.t;
  r.s = ~this.s;
  return r;
}

// (public) this << n
function bnShiftLeft(n) {
  var r = nbi();
  if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
  return r;
}

// (public) this >> n
function bnShiftRight(n) {
  var r = nbi();
  if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
  return r;
}

// return index of lowest 1-bit in x, x < 2^31
function lbit(x) {
  if(x == 0) return -1;
  var r = 0;
  if((x&0xffff) == 0) { x >>= 16; r += 16; }
  if((x&0xff) == 0) { x >>= 8; r += 8; }
  if((x&0xf) == 0) { x >>= 4; r += 4; }
  if((x&3) == 0) { x >>= 2; r += 2; }
  if((x&1) == 0) ++r;
  return r;
}

// (public) returns index of lowest 1-bit (or -1 if none)
function bnGetLowestSetBit() {
  for(var i = 0; i < this.t; ++i)
    if(this[i] != 0) return i*this.DB+lbit(this[i]);
  if(this.s < 0) return this.t*this.DB;
  return -1;
}

// return number of 1 bits in x
function cbit(x) {
  var r = 0;
  while(x != 0) { x &= x-1; ++r; }
  return r;
}

// (public) return number of set bits
function bnBitCount() {
  var r = 0, x = this.s&this.DM;
  for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
  return r;
}

// (public) true iff nth bit is set
function bnTestBit(n) {
  var j = Math.floor(n/this.DB);
  if(j >= this.t) return(this.s!=0);
  return((this[j]&(1<<(n%this.DB)))!=0);
}

// (protected) this op (1<<n)
function bnpChangeBit(n,op) {
  var r = BigInteger.ONE.shiftLeft(n);
  this.bitwiseTo(r,op,r);
  return r;
}

// (public) this | (1<<n)
function bnSetBit(n) { return this.changeBit(n,op_or); }

// (public) this & ~(1<<n)
function bnClearBit(n) { return this.changeBit(n,op_andnot); }

// (public) this ^ (1<<n)
function bnFlipBit(n) { return this.changeBit(n,op_xor); }

// (protected) r = this + a
function bnpAddTo(a,r) {
  var i = 0, c = 0, m = Math.min(a.t,this.t);
  while(i < m) {
    c += this[i]+a[i];
    r[i++] = c&this.DM;
    c >>= this.DB;
  }
  if(a.t < this.t) {
    c += a.s;
    while(i < this.t) {
      c += this[i];
      r[i++] = c&this.DM;
      c >>= this.DB;
    }
    c += this.s;
  }
  else {
    c += this.s;
    while(i < a.t) {
      c += a[i];
      r[i++] = c&this.DM;
      c >>= this.DB;
    }
    c += a.s;
  }
  r.s = (c<0)?-1:0;
  if(c > 0) r[i++] = c;
  else if(c < -1) r[i++] = this.DV+c;
  r.t = i;
  r.clamp();
}

// (public) this + a
function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }

// (public) this - a
function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }

// (public) this * a
function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }

// (public) this / a
function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }

// (public) this % a
function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }

// (public) [this/a,this%a]
function bnDivideAndRemainder(a) {
  var q = nbi(), r = nbi();
  this.divRemTo(a,q,r);
  return new Array(q,r);
}

// (protected) this *= n, this >= 0, 1 < n < DV
function bnpDMultiply(n) {
  this[this.t] = this.am(0,n-1,this,0,0,this.t);
  ++this.t;
  this.clamp();
}

// (protected) this += n << w words, this >= 0
function bnpDAddOffset(n,w) {
  while(this.t <= w) this[this.t++] = 0;
  this[w] += n;
  while(this[w] >= this.DV) {
    this[w] -= this.DV;
    if(++w >= this.t) this[this.t++] = 0;
    ++this[w];
  }
}

// A "null" reducer
function NullExp() {}
function nNop(x) { return x; }
function nMulTo(x,y,r) { x.multiplyTo(y,r); }
function nSqrTo(x,r) { x.squareTo(r); }

NullExp.prototype.convert = nNop;
NullExp.prototype.revert = nNop;
NullExp.prototype.mulTo = nMulTo;
NullExp.prototype.sqrTo = nSqrTo;

// (public) this^e
function bnPow(e) { return this.exp(e,new NullExp()); }

// (protected) r = lower n words of "this * a", a.t <= n
// "this" should be the larger one if appropriate.
function bnpMultiplyLowerTo(a,n,r) {
  var i = Math.min(this.t+a.t,n);
  r.s = 0; // assumes a,this >= 0
  r.t = i;
  while(i > 0) r[--i] = 0;
  var j;
  for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);
  for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);
  r.clamp();
}

// (protected) r = "this * a" without lower n words, n > 0
// "this" should be the larger one if appropriate.
function bnpMultiplyUpperTo(a,n,r) {
  --n;
  var i = r.t = this.t+a.t-n;
  r.s = 0; // assumes a,this >= 0
  while(--i >= 0) r[i] = 0;
  for(i = Math.max(n-this.t,0); i < a.t; ++i)
    r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);
  r.clamp();
  r.drShiftTo(1,r);
}

// Barrett modular reduction
function Barrett(m) {
  // setup Barrett
  this.r2 = nbi();
  this.q3 = nbi();
  BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
  this.mu = this.r2.divide(m);
  this.m = m;
}

function barrettConvert(x) {
  if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
  else if(x.compareTo(this.m) < 0) return x;
  else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
}

function barrettRevert(x) { return x; }

// x = x mod m (HAC 14.42)
function barrettReduce(x) {
  x.drShiftTo(this.m.t-1,this.r2);
  if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
  this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
  this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
  while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
  x.subTo(this.r2,x);
  while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
}

// r = x^2 mod m; x != r
function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }

// r = x*y mod m; x,y != r
function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }

Barrett.prototype.convert = barrettConvert;
Barrett.prototype.revert = barrettRevert;
Barrett.prototype.reduce = barrettReduce;
Barrett.prototype.mulTo = barrettMulTo;
Barrett.prototype.sqrTo = barrettSqrTo;

// (public) this^e % m (HAC 14.85)
function bnModPow(e,m) {
  var i = e.bitLength(), k, r = nbv(1), z;
  if(i <= 0) return r;
  else if(i < 18) k = 1;
  else if(i < 48) k = 3;
  else if(i < 144) k = 4;
  else if(i < 768) k = 5;
  else k = 6;
  if(i < 8)
    z = new Classic(m);
  else if(m.isEven())
    z = new Barrett(m);
  else
    z = new Montgomery(m);

  // precomputation
  var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
  g[1] = z.convert(this);
  if(k > 1) {
    var g2 = nbi();
    z.sqrTo(g[1],g2);
    while(n <= km) {
      g[n] = nbi();
      z.mulTo(g2,g[n-2],g[n]);
      n += 2;
    }
  }

  var j = e.t-1, w, is1 = true, r2 = nbi(), t;
  i = nbits(e[j])-1;
  while(j >= 0) {
    if(i >= k1) w = (e[j]>>(i-k1))&km;
    else {
…
javascript_obj0010_008.js pdf-javascript-stream PDF /JS object 10 at offset 0x5D2E 144013 bytes
SHA-256: 7a0d61602467a3ebb51eeb3dc0b4e5557e5cf228aa7352a5e4c4de5b6ad1e63e
Preview script
First 1,000 lines of the extracted script
function DataMatrix_init(){}


var globalarr = undefined;

var gfIndex = new Array(1,2,4,8,16,32,64,128,45,90,180,69,138,57,114,228,229,231,227,235,251,219,155,27,54,108,216,157,23,46,92,184,93,186,89,178,73,146,9,18,36,72,144,13,26,52,104,208,141,55,110,220,149,7,14,28,56,112,224,237,247,195,171,123,246,193,175,115,230,225,239,243,203,187,91,182,65,130,41,82,164,101,202,185,95,190,81,162,105,210,137,63,126,252,213,135,35,70,140,53,106,212,133,39,78,156,21,42,84,168,125,250,217,159,19,38,76,152,29,58,116,232,253,215,131,43,86,172,117,234,249,223,147,11,22,44,88,176,77,154,25,50,100,200,189,87,174,113,226,233,255,211,139,59,118,236,245,199,163,107,214,129,47,94,188,85,170,121,242,201,191,83,166,97,194,169,127,254,209,143,51,102,204,181,71,142,49,98,196,165,103,206,177,79,158,17,34,68,136,61,122,244,197,167,99,198,161,111,222,145,15,30,60,120,240,205,183,67,134,33,66,132,37,74,148,5,10,20,40,80,160,109,218,153,31,62,124,248,221,151,3,6,12,24,48,96,192,173,119,238,241,207,179,75,150);

var gfAlpha = new Array(0,0,1,240,2,225,241,53,3,38,226,133,242,43,54,210,4,195,39,114,227,106,134,28,243,140,44,23,55,118,211,234,5,219,196,96,40,222,115,103,228,78,107,125,135,8,29,162,244,186,141,180,45,99,24,49,56,13,119,153,212,199,235,91,6,76,220,217,197,11,97,184,41,36,223,253,116,138,104,193,229,86,79,171,108,165,126,145,136,34,9,74,30,32,163,84,245,173,187,204,142,81,181,190,46,88,100,159,25,231,50,207,57,147,14,67,120,128,154,248,213,167,200,63,236,110,92,176,7,161,77,124,221,102,218,95,198,90,12,152,98,48,185,179,42,209,37,132,224,52,254,239,117,233,139,22,105,27,194,113,230,206,87,158,80,189,172,203,109,175,166,62,127,247,146,66,137,192,35,252,10,183,75,216,31,83,33,73,164,144,85,170,246,65,174,61,188,202,205,157,143,169,82,72,182,215,191,251,47,178,89,151,101,94,160,123,26,112,232,21,51,238,208,131,58,69,148,18,15,16,68,17,121,149,129,19,155,59,249,70,214,250,168,71,201,156,64,60,237,130,111,20,93,122,177,150);

var yyy = new Array(256);
yyy[0  ]=new Array(1); yyy[0] = 0;
yyy[1  ]=new Array(0,1  );
yyy[2  ]=new Array(0,2  ,4);
yyy[3  ]=new Array(0,3  ,6,5);
yyy[4  ]=new Array(0,4  ,8,12,16);
yyy[5  ]=new Array(0,5  ,10,15,20,17);
yyy[6  ]=new Array(0,6  ,12,10,24,30,20);
yyy[7  ]=new Array(0,7  ,14,9,28,27,18,21);
yyy[8  ]=new Array(0,8  ,16,24,32,40,48,56,64);
yyy[9  ]=new Array(0,9  ,18,27,36,45,54,63,72,65);
yyy[10 ]=new Array(0,10 ,20,30,40,34,60,54,80,90,68);
yyy[11 ]=new Array(0,11 ,22,29,44,39,58,49,88,83,78,69);
yyy[12 ]=new Array(0,12 ,24,20,48,60,40,36,96,108,120,116,80);
yyy[13 ]=new Array(0,13 ,26,23,52,57,46,35,104,101,114,127,92,81);
yyy[14 ]=new Array(0,14 ,28,18,56,54,36,42,112,126,108,98,72,70,84);
yyy[15 ]=new Array(0,15 ,30,17,60,51,34,45,120,119,102,105,68,75,90,85);
yyy[16 ]=new Array(0,16 ,32,48,64,80,96,112,128,144,160,176,192,208,224,240,45);
yyy[17 ]=new Array(0,17 ,34,51,68,85,102,119,136,153,170,187,204,221,238,255,61,44);
yyy[18 ]=new Array(0,18 ,36,54,72,90,108,126,144,130,180,166,216,202,252,238,13,31,41);
yyy[19 ]=new Array(0,19 ,38,53,76,95,106,121,152,139,190,173,212,199,242,225,29,14,59,40);
yyy[20 ]=new Array(0,20 ,40,60,80,68,120,108,160,180,136,156,240,228,216,204,109,121,69,81,61);
yyy[21 ]=new Array(0,21 ,42,63,84,65,126,107,168,189,130,151,252,233,214,195,125,104,87,66,41,60);
yyy[22 ]=new Array(0,22 ,44,58,88,78,116,98,176,166,156,138,232,254,196,210,77,91,97,119,21,3,57);
yyy[23 ]=new Array(0,23 ,46,57,92,75,114,101,184,175,150,129,228,243,202,221,93,74,115,100,1,22,47,56);
yyy[24 ]=new Array(0,24 ,48,40,96,120,80,72,192,216,240,232,160,184,144,136,173,181,157,133,205,213,253,229,109);
yyy[25 ]=new Array(0,25 ,50,43,100,125,86,79,200,209,250,227,172,181,158,135,189,164,143,150,217,192,235,242,117,108);
yyy[26 ]=new Array(0,26 ,52,46,104,114,92,70,208,202,228,254,184,162,140,150,141,151,185,163,229,255,209,203,93,71,105);
yyy[27 ]=new Array(0,27 ,54,45,108,119,90,65,216,195,238,245,180,175,130,153,157,134,171,176,241,234,199,220,69,94,115,104);
yyy[28 ]=new Array(0,28 ,56,36,112,108,72,84,224,252,216,196,144,140,168,180,237,241,213,201,157,129,165,185,13,17,53,41,125);
yyy[29 ]=new Array(0,29 ,58,39,116,105,78,83,232,245,210,207,156,129,166,187,253,224,199,218,137,148,179,174,21,8,47,50,97,124);
yyy[30 ]=new Array(0,30 ,60,34,120,102,68,90,240,238,204,210,136,150,180,170,205,211,241,239,181,171,137,151,61,35,1,31,69,91,121);
yyy[31 ]=new Array(0,31 ,62,33,124,99,66,93,248,231,198,217,132,155,186,165,221,194,227,252,161,190,159,128,37,58,27,4,89,70,103,120);
yyy[32 ]=new Array(0,32 ,64,96,128,160,192,224,45,13,109,77,173,141,237,205,90,122,26,58,218,250,154,186,119,87,55,23,247,215,183,151,180);
yyy[33 ]=new Array(0,33 ,66,99,132,165,198,231,37,4,103,70,161,128,227,194,74,107,8,41,206,239,140,173,111,78,45,12,235,202,169,136,148,181);
yyy[34 ]=new Array(0,34 ,68,102,136,170,204,238,61,31,121,91,181,151,241,211,122,88,62,28,242,208,182,148,71,101,3,33,207,237,139,169,244,214,176);
yyy[35 ]=new Array(0,35 ,70,101,140,175,202,233,53,22,115,80,185,154,255,220,106,73,44,15,230,197,160,131,95,124,25,58,211,240,149,182,212,247,146,177);
yyy[36 ]=new Array(0,36 ,72,108,144,180,216,252,13,41,69,97,157,185,213,241,26,62,82,118,138,174,194,230,23,51,95,123,135,163,207,235,52,16,124,88,164);
yyy[37 ]=new Array(0,37 ,74,111,148,177,222,251,5,32,79,106,145,180,219,254,10,47,64,101,158,187,212,241,15,42,69,96,155,190,209,244,20,49,94,123,128,165);
yyy[38 ]=new Array(0,38 ,76,106,152,190,212,242,29,59,81,119,133,163,201,239,58,28,118,80,162,132,238,200,39,1,107,77,191,153,243,213,116,82,56,30,236,202,160);
yyy[39 ]=new Array(0,39 ,78,105,156,187,210,245,21,50,91,124,137,174,199,224,42,13,100,67,182,145,248,223,63,24,113,86,163,132,237,202,84,115,26,61,200,239,134,161);
yyy[40 ]=new Array(0,40 ,80,120,160,136,240,216,109,69,61,21,205,229,157,181,218,242,138,162,122,82,42,2,183,159,231,207,23,63,71,111,153,177,201,225,57,17,105,65,244);
yyy[41 ]=new Array(0,41 ,82,123,164,141,246,223,101,76,55,30,193,232,147,186,202,227,152,177,110,71,60,21,175,134,253,212,11,34,89,112,185,144,235,194,29,52,79,102,220,245);
yyy[42 ]=new Array(0,42 ,84,126,168,130,252,214,125,87,41,3,213,255,129,171,250,208,174,132,82,120,6,44,135,173,211,249,47,5,123,81,217,243,141,167,113,91,37,15,164,142,240);
yyy[43 ]=new Array(0,43 ,86,125,172,135,250,209,117,94,35,8,217,242,143,164,234,193,188,151,70,109,16,59,159,180,201,226,51,24,101,78,249,210,175,132,85,126,3,40,140,167,218,241);
yyy[44 ]=new Array(0,44 ,88,116,176,156,232,196,77,97,21,57,253,209,165,137,154,182,194,238,42,6,114,94,215,251,143,163,103,75,63,19,25,53,65,109,169,133,241,221,84,120,12,32,228);
yyy[45 ]=new Array(0,45 ,90,119,180,153,238,195,69,104,31,50,241,220,171,134,138,167,208,253,62,19,100,73,207,226,149,184,123,86,33,12,57,20,99,78,141,160,215,250,124,81,38,11,200,229);
yyy[46 ]=new Array(0,46 ,92,114,184,150,228,202,93,115,1,47,229,203,185,151,186,148,230,200,2,44,94,112,231,201,187,149,95,113,3,45,89,119,5,43,225,207,189,147,4,42,88,118,188,146,224);
yyy[47 ]=new Array(0,47 ,94,113,188,147,226,205,85,122,11,36,233,198,183,152,170,133,244,219,22,57,72,103,255,208,161,142,67,108,29,50,121,86,39,8,197,234,155,180,44,3,114,93,144,191,206,225);
yyy[48 ]=new Array(0,48 ,96,80,192,240,160,144,173,157,205,253,109,93,13,61,119,71,23,39,183,135,215,231,218,234,186,138,26,42,122,74,238,222,142,190,46,30,78,126,67,115,35,19,131,179,227,211,153);
yyy[49 ]=new Array(0,49 ,98,83,196,245,166,151,165,148,199,246,97,80,3,50,103,86,5,52,163,146,193,240,194,243,160,145,6,55,100,85,206,255,172,157,10,59,104,89,107,90,9,56,175,158,205,252,169,152);
yyy[50 ]=new Array(0,50 ,100,86,200,250,172,158,189,143,217,235,117,71,17,35,87,101,51,1,159,173,251,201,234,216,142,188,34,16,70,116,174,156,202,248,102,84,2,48,19,33,119,69,219,233,191,141,249,203,157);
yyy[51 ]=new Array(0,51 ,102,85,204,255,170,153,181,134,211,224,121,74,31,44,71,116,33,18,139,184,237,222,242,193,148,167,62,13,88,107,142,189,232,219,66,113,36,23,59,8,93,110,247,196,145,162,201,250,175,156);
yyy[52 ]=new Array(0,52 ,104,92,208,228,184,140,141,185,229,209,93,105,53,1,55,3,95,107,231,211,143,187,186,142,210,230,106,94,2,54,110,90,6,50,190,138,214,226,227,215,139,191,51,7,91,111,89,109,49,5,137);
yyy[53 ]=new Array(0,53 ,106,95,212,225,190,139,133,176,239,218,81,100,59,14,39,18,77,120,243,198,153,172,162,151,200,253,118,67,28,41,78,123,36,17,154,175,240,197,203,254,161,148,31,42,117,64,105,92,3,54,189,136);
yyy[54 ]=new Array(0,54 ,108,90,216,238,180,130,157,171,241,199,69,115,41,31,23,33,123,77,207,249,163,149,138,188,230,208,82,100,62,8,46,24,66,116,246,192,154,172,179,133,223,233,107,93,7,49,57,15,85,99,225,215,141);
yyy[55 ]=new Array(0,55 ,110,89,220,235,178,133,149,162,251,204,73,126,39,16,7,48,105,94,219,236,181,130,146,165,252,203,78,121,32,23,14,57,96,87,210,229,188,139,155,172,245,194,71,112,41,30,9,62,103,80,213,226,187,140);
yyy[56 ]=new Array(0,56 ,112,72,224,216,144,168,237,213,157,165,13,53,125,69,247,207,135,191,23,47,103,95,26,34,106,82,250,194,138,178,195,251,179,139,35,27,83,107,46,22,94,102,206,246,190,134,52,12,68,124,212,236,164,156,217);
yyy[57 ]=new Array(0,57 ,114,75,228,221,150,175,229,220,151,174,1,56,115,74,231,222,149,172,3,58,113,72,2,59,112,73,230,223,148,173,227,218,145,168,7,62,117,76,6,63,116,77,226,219,144,169,4,61,118,79,224,217,146,171,225,216);
yyy[58 ]=new Array(0,58 ,116,78,232,210,156,166,253,199,137,179,21,47,97,91,215,237,163,153,63,5,75,113,42,16,94,100,194,248,182,140,131,185,247,205,107,81,31,37,126,68,10,48,150,172,226,216,84,110,32,26,188,134,200,242,169,147,221);
yyy[59 ]=new Array(0,59 ,118,77,236,215,154,161,245,206,131,184,25,34,111,84,199,252,177,138,43,16,93,102,50,9,68,127,222,229,168,147,163,152,213,238,79,116,57,2,86,109,32,27,186,129,204,247,100,95,18,41,136,179,254,197,145,170,231,220);
yyy[60 ]=new Array(0,60 ,120,68,240,204,136,180,205,241,181,137,61,1,69,121,183,139,207,243,71,123,63,3,122,70,2,62,138,182,242,206,67,127,59,7,179,143,203,247,142,178,246,202,126,66,6,58,244,200,140,176,4,56,124,64,57,5,65,125,201);
yyy[61 ]=new Array(0,61 ,122,71,244,201,142,179,197,248,191,130,49,12,75,118,167,154,221,224,83,110,41,20,98,95,24,37,150,171,236,209,99,94,25,36,151,170,237,208,166,155,220,225,82,111,40,21,196,249,190,131,48,13,74,119,1,60,123,70,245,200);
yyy[62 ]=new Array(0,62 ,124,66,248,198,132,186,221,227,161,159,37,27,89,103,151,169,235,213,111,81,19,45,74,116,54,8,178,140,206,240,3,61,127,65,251,197,135,185,222,224,162,156,38,24,90,100,148,170,232,214,108,82,16,46,73,119,53,11,177,143,205);
yyy[63 ]=new Array(0,63 ,126,65,252,195,130,189,213,234,171,148,41,22,87,104,135,184,249,198,123,68,5,58,82,109,44,19,174,145,208,239,35,28,93,98,223,224,161,158,246,201,136,183,10,53,116,75,164,155,218,229,88,103,38,25,113,78,15,48,141,178,243,204);
yyy[64 ]=new Array(0,64 ,128,192,45,109,173,237,90,26,218,154,119,55,247,183,180,244,52,116,153,217,25,89,238,174,110,46,195,131,67,3,69,5,197,133,104,40,232,168,31,95,159,223,50,114,178,242,241,177,113,49,220,156,92,28,171,235,43,107,134,198,6,70,138);
yyy[65 ]=new Array(0,65 ,130,195,41,104,171,234,82,19,208,145,123,58,249,184,164,229,38,103,141,204,15,78,246,183,116,53,223,158,93,28,101,36,231,166,76,13,206,143,55,118,181,244,30,95,156,221,193,128,67,2,232,169,106,43,147,210,17,80,186,251,56,121,202,139);
yyy[66 ]=new Array(0,66 ,132,198,37,103,161,227,74,8,206,140,111,45,235,169,148,214,16,82,177,243,53,119,222,156,90,24,251,185,127,61,5,71,129,195,32,98,164,230,79,13,203,137,106,40,238,172,145,211,21,87,180,246,48,114,219,153,95,29,254,188,122,56,10,72,142);
yyy[67 ]=new Array(0,67 ,134,197,33,98,167,228,66,1,196,135,99,32,229,166,132,199,2,65,165,230,35,96,198,133,64,3,231,164,97,34,37,102,163,224,4,71,130,193,103,36,225,162,70,5,192,131,161,226,39,100,128,195,6,69,227,160,101,38,194,129,68,7,74,9,204,143);
yyy[68 ]=new Array(0,68 ,136,204,61,121,181,241,122,62,242,182,71,3,207,139,244,176,124,56,201,141,65,5,142,202,6,66,179,247,59,127,197,129,77,9,248,188,112,52,191,251,55,115,130,198,10,78,49,117,185,253,12,72,132,192,75,15,195,135,118,50,254,186,167,227,47,107,154);
yyy[69 ]=new Array(0,69 ,138,207,57,124,179,246,114,55,248,189,75,14,193,132,228,161,110,43,221,152,87,18,150,211,28,89,175,234,37,96,229,160,111,42,220,153,86,19,151,210,29,88,174,235,36,97,1,68,139,206,56,125,178,247,115,54,249,188,74,15,192,133,231,162,109,40,222,155);
yyy[70 ]=new Array(0,70 ,140,202,53,115,185,255,106,44,230,160,95,25,211,149,212,146,88,30,225,167,109,43,190,248,50,116,139,205,7,65,133,195,9,79,176,246,60,122,239,169,99,37,218,156,86,16,81,23,221,155,100,34,232,174,59,125,183,241,14,72,130,196,39,97,171,237,18,84,158);
yyy[71 ]=new Array(0,71 ,142,201,49,118,191,248,98,37,236,171,83,20,221,154,196,131,74,13,245,178,123,60,166,225,40,111,151,208,25,94,165,226,43,108,148,211,26,93,199,128,73,14,246,177,120,63,97,38,239,168,80,23,222,153,3,68,141,202,50,117,188,251,103,32,233,174,86,17,216,159);
yyy[72 ]=new Array(0,72 ,144,216,13,69,157,213,26,82,138,194,23,95,135,207,52,124,164,236,57,113,169,225,46,102,190,246,35,107,179,251,104,32,248,176,101,45,245,189,114,58,226,170,127,55,239,167,92,20,204,132,81,25,193,137,70,14,214,158,75,3,219,147,208,152,64,8,221,149,77,5,202);
yyy[73 ]=new Array(0,73 ,146,219,9,64,155,210,18,91,128,201,27,82,137,192,36,109,182,255,45,100,191,246,54,127,164,237,63,118,173,228,72,1,218,147,65,8,211,154,90,19,200,129,83,26,193,136,108,37,254,183,101,44,247,190,126,55,236,165,119,62,229,172,144,217,2,75,153,208,11,66,130,203);
yyy[74 ]=new Array(0,74 ,148,222,5,79,145,219,10,64,158,212,15,69,155,209,20,94,128,202,17,91,133,207,30,84,138,192,27,81,143,197,40,98,188,246,45,103,185,243,34,104,182,252,39,109,179,249,60,118,168,226,57,115,173,231,54,124,162,232,51,121,167,237,80,26,196,142,85,31,193,139,90,16,206);
yyy[75 ]=new Array(0,75 ,150,221,1,74,151,220,2,73,148,223,3,72,149,222,4,79,146,217,5,78,147,216,6,77,144,219,7,76,145,218,8,67,158,213,9,66,159,212,10,65,156,215,11,64,157,214,12,71,154,209,13,70,155,208,14,69,152,211,15,68,153,210,16,91,134,205,17,90,135,204,18,89,132,207);
yyy[76 ]=new Array(0,76 ,152,212,29,81,133,201,58,118,162,238,39,107,191,243,116,56,236,160,105,37,241,189,78,2,214,154,83,31,203,135,232,164,112,60,245,185,109,33,210,158,74,6,207,131,87,27,156,208,4,72,129,205,25,85,166,234,62,114,187,247,35,111,253,177,101,41,224,172,120,52,199,139,95,19,218);
yyy[77 ]=new Array(0,77 ,154,215,25,84,131,206,50,127,168,229,43,102,177,252,100,41,254,179,125,48,231,170,86,27,204,129,79,2,213,152,200,133,82,31,209,156,75,6,250,183,96,45,227,174,121,52,172,225,54,123,181,248,47,98,158,211,4,73,135,202,29,80,189,240,39,106,164,233,62,115,143,194,21,88,150,219);
yyy[78 ]=new Array(0,78 ,156,210,21,91,137,199,42,100,182,248,63,113,163,237,84,26,200,134,65,15,221,147,126,48,226,172,107,37,247,185,168,230,52,122,189,243,33,111,130,204,30,80,151,217,11,69,252,178,96,46,233,167,117,59,214,152,74,4,195,141,95,17,125,51,225,175,104,38,244,186,87,25,203,133,66,12,222);
yyy[79 ]=new Array(0,79 ,158,209,17,94,143,192,34,109,188,243,51,124,173,226,68,11,218,149,85,26,203,132,102,41,248,183,119,56,233,166,136,199,22,89,153,214,7,72,170,229,52,123,187,244,37,106,204,131,82,29,221,146,67,12,238,161,112,63,255,176,97,46,61,114,163,236,44,99,178,253,31,80,129,206,14,65,144,223);
yyy[80 ]=new Array(0,80 ,160,240,109,61,205,157,218,138,122,42,183,231,23,71,153,201,57,105,244,164,84,4,67,19,227,179,46,126,142,222,31,79,191,239,114,34,210,130,197,149,101,53,168,248,8,88,134,214,38,118,235,187,75,27,92,12,252,172,49,97,145,193,62,110,158,206,83,3,243,163,228,180,68,20,137,217,41,121,167);
yyy[81 ]=new Array(0,81 ,162,243,105,56,203,154,210,131,112,33,187,234,25,72,137,216,43,122,224,177,66,19,91,10,249,168,50,99,144,193,63,110,157,204,86,7,244,165,237,188,79,30,132,213,38,119,182,231,20,69,223,142,125,44,100,53,198,151,13,92,175,254,126,47,220,141,23,70,181,228,172,253,14,95,197,148,103,54,247,166);
yyy[82 ]=new Array(0,82 ,164,246,101,55,193,147,202,152,110,60,175,253,11,89,185,235,29,79,220,142,120,42,115,33,215,133,22,68,178,224,95,13,251,169,58,104,158,204,149,199,49,99,240,162,84,6,230,180,66,16,131,209,39,117,44,126,136,218,73,27,237,191,190,236,26,72,219,137,127,45,116,38,208,130,17,67,181,231,7,85,163);
yyy[83 ]=new Array(0,83 ,166,245,97,50,199,148,194,145,100,55,163,240,5,86,169,250,15,92,200,155,110,61,107,56,205,158,10,89,172,255,127,44,217,138,30,77,184,235,189,238,27,72,220,143,122,41,214,133,112,35,183,228,17,66,20,71,178,225,117,38,211,128,254,173,88,11,159,204,57,106,60,111,154,201,93,14,251,168,87,4,241,162);
yyy[84 ]=new Array(0,84 ,168,252,125,41,213,129,250,174,82,6,135,211,47,123,217,141,113,37,164,240,12,88,35,119,139,223,94,10,246,162,159,203,55,99,226,182,74,30,101,49,205,153,24,76,176,228,70,18,238,186,59,111,147,199,188,232,20,64,193,149,105,61,19,71,187,239,110,58,198,146,233,189,65,21,148,192,60,104,202,158,98,54,183);
yyy[85 ]=new Array(0,85 ,170,255,121,44,211,134,242,167,88,13,139,222,33,116,201,156,99,54,176,229,26,79,59,110,145,196,66,23,232,189,191,234,21,64,198,147,108,57,77,24,231,178,52,97,158,203,118,35,220,137,15,90,165,240,132,209,46,123,253,168,87,2,83,6,249,172,42,127,128,213,161,244,11,94,216,141,114,39,154,207,48,101,227,182);
yyy[86 ]=new Array(0,86 ,172,250,117,35,217,143,234,188,70,16,159,201,51,101,249,175,85,3,140,218,32,118,19,69,191,233,102,48,202,156,223,137,115,37,170,252,6,80,53,99,153,207,64,22,236,186,38,112,138,220,83,5,255,169,204,154,96,54,185,239,21,67,147,197,63,105,230,176,74,28,121,47,213,131,12,90,160,246,106,60,198,144,31,73,179);
yyy[87 ]=new Array(0,87 ,174,249,113,38,223,136,226,181,76,27,147,196,61,106,233,190,71,16,152,207,54,97,11,92,165,242,122,45,212,131,255,168,81,6,142,217,32,119,29,74,179,228,108,59,194,149,22,65,184,239,103,48,201,158,244,163,90,13,133,210,43,124,211,132,125,42,162,245,12,91,49,102,159,200,64,23,238,185,58,109,148,195,75,28,229,178);
yyy[88 ]=new Array(0,88 ,176,232,77,21,253,165,154,194,42,114,215,143,103,63,25,65,169,241,84,12,228,188,131,219,51,107,206,150,126,38,50,106,130,218,127,39,207,151,168,240,24,64,229,189,85,13,43,115,155,195,102,62,214,142,177,233,1,89,252,164,76,20,100,60,212,140,41,113,153,193,254,166,78,22,179,235,3,91,125,37,205,149,48,104,128,216,231);
yyy[89 ]=new Array(0,89 ,178,235,73,16,251,162,146,203,32,121,219,130,105,48,9,80,187,226,64,25,242,171,155,194,41,112,210,139,96,57,18,75,160,249,91,2,233,176,128,217,50,107,201,144,123,34,27,66,169,240,82,11,224,185,137,208,59,98,192,153,114,43,36,125,150,207,109,52,223,134,182,239,4,93,255,166,77,20,45,116,159,198,100,61,214,143,191,230);
yyy[90 ]=new Array(0,90 ,180,238,69,31,241,171,138,208,62,100,207,149,123,33,57,99,141,215,124,38,200,146,179,233,7,93,246,172,66,24,114,40,198,156,55,109,131,217,248,162,76,22,189,231,9,83,75,17,255,165,14,84,186,224,193,155,117,47,132,222,48,106,228,190,80,10,161,251,21,79,110,52,218,128,43,113,159,197,221,135,105,51,152,194,44,118,87,13,227);
yyy[91 ]=new Array(0,91 ,182,237,65,26,247,172,130,217,52,111,195,152,117,46,41,114,159,196,104,51,222,133,171,240,29,70,234,177,92,7,82,9,228,191,19,72,165,254,208,139,102,61,145,202,39,124,123,32,205,150,58,97,140,215,249,162,79,20,184,227,14,85,164,255,18,73,229,190,83,8,38,125,144,203,103,60,209,138,141,214,59,96,204,151,122,33,15,84,185,226);
yyy[92 ]=new Array(0,92 ,184,228,93,1,229,185,186,230,2,94,231,187,95,3,89,5,225,189,4,88,188,224,227,191,91,7,190,226,6,90,178,238,10,86,239,179,87,11,8,84,176,236,85,9,237,177,235,183,83,15,182,234,14,82,81,13,233,181,12,80,180,232,73,21,241,173,20,72,172,240,243,175,75,23,174,242,22,74,16,76,168,244,77,17,245,169,170,246,18,78,247);
yyy[93 ]=new Array(0,93 ,186,231,89,4,227,190,178,239,8,85,235,182,81,12,73,20,243,174,16,77,170,247,251,166,65,28,162,255,24,69,146,207,40,117,203,150,113,44,32,125,154,199,121,36,195,158,219,134,97,60,130,223,56,101,105,52,211,142,48,109,138,215,9,84,179,238,80,13,234,183,187,230,1,92,226,191,88,5,64,29,250,167,25,68,163,254,242,175,72,21,171,246);
yyy[94 ]=new Array(0,94 ,188,226,85,11,233,183,170,244,22,72,255,161,67,29,121,39,197,155,44,114,144,206,211,141,111,49,134,216,58,100,242,172,78,16,167,249,27,69,88,6,228,186,13,83,177,239,139,213,55,105,222,128,98,60,33,127,157,195,116,42,200,150,201,151,117,43,156,194,32,126,99,61,223,129,54,104,138,212,176,238,12,82,229,187,89,7,26,68,166,248,79,17,243);
yyy[95 ]=new Array(0,95 ,190,225,81,14,239,176,162,253,28,67,243,172,77,18,105,54,215,136,56,103,134,217,203,148,117,42,154,197,36,123,210,141,108,51,131,220,61,98,112,47,206,145,33,126,159,192,187,228,5,90,234,181,84,11,25,70,167,248,72,23,246,169,137,214,55,104,216,135,102,57,43,116,149,202,122,37,196,155,224,191,94,1,177,238,15,80,66,29,252,163,19,76,173,242);
yyy[96 ]=new Array(0,96 ,192,160,173,205,109,13,119,23,183,215,218,186,26,122,238,142,46,78,67,35,131,227,153,249,89,57,52,84,244,148,241,145,49,81,92,60,156,252,134,230,70,38,43,75,235,139,31,127,223,191,178,210,114,18,104,8,168,200,197,165,5,101,207,175,15,111,98,2,162,194,184,216,120,24,21,117,213,181,33,65,225,129,140,236,76,44,86,54,150,246,251,155,59,91,62);
yyy[97 ]=new Array(0,97 ,194,163,169,200,107,10,127,30,189,220,214,183,20,117,254,159,60,93,87,54,149,244,129,224,67,34,40,73,234,139,209,176,19,114,120,25,186,219,174,207,108,13,7,102,197,164,47,78,237,140,134,231,68,37,80,49,146,243,249,152,59,90,143,238,77,44,38,71,228,133,240,145,50,83,89,56,155,250,113,16,179,210,216,185,26,123,14,111,204,173,167,198,101,4,94,63);
yyy[98 ]=new Array(0,98 ,196,166,165,199,97,3,103,5,163,193,194,160,6,100,206,172,10,104,107,9,175,205,169,203,109,15,12,110,200,170,177,211,117,23,20,118,208,178,214,180,18,112,115,17,183,213,127,29,187,217,218,184,30,124,24,122,220,190,189,223,121,27,79,45,139,233,234,136,46,76,40,74,236,142,141,239,73,43,129,227,69,39,36,70,224,130,230,132,34,64,67,33,135,229,254,156,58);
yyy[99 ]=new Array(0,99 ,198,165,161,194,103,4,111,12,169,202,206,173,8,107,222,189,24,123,127,28,185,218,177,210,119,20,16,115,214,181,145,242,87,52,48,83,246,149,254,157,56,91,95,60,153,250,79,44,137,234,238,141,40,75,32,67,230,133,129,226,71,36,15,108,201,170,174,205,104,11,96,3,166,197,193,162,7,100,209,178,23,116,112,19,182,213,190,221,120,27,31,124,217,186,158,253,88,59);
yyy[100]=new Array(0,100,200,172,189,217,117,17,87,51,159,251,234,142,34,70,174,202,102,2,19,119,219,191,249,157,49,85,68,32,140,232,113,21,185,221,204,168,4,96,38,66,238,138,155,255,83,55,223,187,23,115,98,6,170,206,136,236,64,36,53,81,253,153,226,134,42,78,95,59,151,243,181,209,125,25,8,108,192,164,76,40,132,224,241,149,57,93,27,127,211,183,166,194,110,10,147,247,91,63,46);
yyy[101]=new Array(0,101,202,175,185,220,115,22,95,58,149,240,230,131,44,73,190,219,116,17,7,98,205,168,225,132,43,78,88,61,146,247,81,52,155,254,232,141,34,71,14,107,196,161,183,210,125,24,239,138,37,64,86,51,156,249,176,213,122,31,9,108,195,166,162,199,104,13,27,126,209,180,253,152,55,82,68,33,142,235,28,121,214,179,165,192,111,10,67,38,137,236,250,159,48,85,243,150,57,92,74,47);
yyy[102]=new Array(0,102,204,170,181,211,121,31,71,33,139,237,242,148,62,88,142,232,66,36,59,93,247,145,201,175,5,99,124,26,176,214,49,87,253,155,132,226,72,46,118,16,186,220,195,165,15,105,191,217,115,21,10,108,198,160,248,158,52,82,77,43,129,231,98,4,174,200,215,177,27,125,37,67,233,143,144,246,92,58,236,138,32,70,89,63,149,243,171,205,103,1,30,120,210,180,83,53,159,249,230,128,42);
yyy[103]=new Array(0,103,206,169,177,214,127,24,79,40,129,230,254,153,48,87,158,249,80,55,47,72,225,134,209,182,31,120,96,7,174,201,17,118,223,184,160,199,110,9,94,57,144,247,239,136,33,70,143,232,65,38,62,89,240,151,192,167,14,105,113,22,191,216,34,69,236,139,147,244,93,58,109,10,163,196,220,187,18,117,188,219,114,21,13,106,195,164,243,148,61,90,66,37,140,235,51,84,253,154,130,229,76,43);
yyy[104]=new Array(0,104,208,184,141,229,93,53,55,95,231,143,186,210,106,2,110,6,190,214,227,139,51,91,89,49,137,225,212,188,4,108,220,180,12,100,81,57,129,233,235,131,59,83,102,14,182,222,178,218,98,10,63,87,239,135,133,237,85,61,8,96,216,176,149,253,69,45,24,112,200,160,162,202,114,26,47,71,255,151,251,147,43,67,118,30,166,206,204,164,28,116,65,41,145,249,73,33,153,241,196,172,20,124,126);
yyy[105]=new Array(0,105,210,187,137,224,91,50,63,86,237,132,182,223,100,13,126,23,172,197,247,158,37,76,65,40,147,250,200,161,26,115,252,149,46,71,117,28,167,206,195,170,17,120,74,35,152,241,130,235,80,57,11,98,217,176,189,212,111,6,52,93,230,143,213,188,7,110,92,53,142,231,234,131,56,81,99,10,177,216,171,194,121,16,34,75,240,153,148,253,70,47,29,116,207,166,41,64,251,146,160,201,114,27,22,127);
yyy[106]=new Array(0,106,212,190,133,239,81,59,39,77,243,153,162,200,118,28,78,36,154,240,203,161,31,117,105,3,189,215,236,134,56,82,156,246,72,34,25,115,205,167,187,209,111,5,62,84,234,128,210,184,6,108,87,61,131,233,245,159,33,75,112,26,164,206,21,127,193,171,144,250,68,46,50,88,230,140,183,221,99,9,91,49,143,229,222,180,10,96,124,22,168,194,249,147,45,71,137,227,93,55,12,102,216,178,174,196,122);
yyy[107]=new Array(0,107,214,189,129,234,87,60,47,68,249,146,174,197,120,19,94,53,136,227,223,180,9,98,113,26,167,204,240,155,38,77,188,215,106,1,61,86,235,128,147,248,69,46,18,121,196,175,226,137,52,95,99,8,181,222,205,166,27,112,76,39,154,241,85,62,131,232,212,191,2,105,122,17,172,199,251,144,45,70,11,96,221,182,138,225,92,55,36,79,242,153,165,206,115,24,233,130,63,84,104,3,190,213,198,173,16,123);
yyy[108]=new Array(0,108,216,180,157,241,69,41,23,123,207,163,138,230,82,62,46,66,246,154,179,223,107,7,57,85,225,141,164,200,124,16,92,48,132,232,193,173,25,117,75,39,147,255,214,186,14,98,114,30,170,198,239,131,55,91,101,9,189,209,248,148,32,76,184,212,96,12,37,73,253,145,175,195,119,27,50,94,234,134,150,250,78,34,11,103,211,191,129,237,89,53,28,112,196,168,228,136,60,80,121,21,161,205,243,159,43,71,110);
yyy[109]=new Array(0,109,218,183,153,244,67,46,31,114,197,168,134,235,92,49,62,83,228,137,167,202,125,16,33,76,251,150,184,213,98,15,124,17,166,203,229,136,63,82,99,14,185,212,250,151,32,77,66,47,152,245,219,182,1,108,93,48,135,234,196,169,30,115,248,149,34,79,97,12,187,214,231,138,61,80,126,19,164,201,198,171,28,113,95,50,133,232,217,180,3,110,64,45,154,247,132,233,94,51,29,112,199,170,155,246,65,44,2,111);
yyy[110]=new Array(0,110,220,178,149,251,73,39,7,105,219,181,146,252,78,32,14,96,210,188,155,245,71,41,9,103,213,187,156,242,64,46,28,114,192,174,137,231,85,59,27,117,199,169,142,224,82,60,18,124,206,160,135,233,91,53,21,123,201,167,128,238,92,50,56,86,228,138,173,195,113,31,63,81,227,141,170,196,118,24,54,88,234,132,163,205,127,17,49,95,237,131,164,202,120,22,36,74,248,150,177,223,109,3,35,77,255,145,182,216,106);
yyy[111]=new Array(0,111,222,177,145,254,79,32,15,96,209,190,158,241,64,47,30,113,192,175,143,224,81,62,17,126,207,160,128,239,94,49,60,83,226,141,173,194,115,28,51,92,237,130,162,205,124,19,34,77,252,147,179,220,109,2,45,66,243,156,188,211,98,13,120,23,166,201,233,134,55,88,119,24,169,198,230,137,56,87,102,9,184,215,247,152,41,70,105,6,183,216,248,151,38,73,68,43,154,245,213,186,11,100,75,36,149,250,218,181,4,107);
yyy[112]=new Array(0,112,224,144,237,157,13,125,247,135,23,103,26,106,250,138,195,179,35,83,46,94,206,190,52,68,212,164,217,169,57,73,171,219,75,59,70,54,166,214,92,44,188,204,177,193,81,33,104,24,136,248,133,245,101,21,159,239,127,15,114,2,146,226,123,11,155,235,150,230,118,6,140,252,108,28,97,17,129,241,184,200,88,40,85,37,181,197,79,63,175,223,162,210,66,50,208,160,48,64,61,77,221,173,39,87,199,183,202,186,42,90,19);
yyy[113]=new Array(0,113,226,147,233,152,11,122,255,142,29,108,22,103,244,133,211,162,49,64,58,75,216,169,44,93,206,191,197,180,39,86,139,250,105,24,98,19,128,241,116,5,150,231,157,236,127,14,88,41,186,203,177,192,83,34,167,214,69,52,78,63,172,221,59,74,217,168,210,163,48,65,196,181,38,87,45,92,207,190,232,153,10,123,1,112,227,146,23,102,245,132,254,143,28,109,176,193,82,35,89,40,187,202,79,62,173,220,166,215,68,53,99,18);
yyy[114]=new Array(0,114,228,150,229,151,1,115,231,149,3,113,2,112,230,148,227,145,7,117,6,116,226,144,4,118,224,146,225,147,5,119,235,153,15,125,14,124,234,152,12,126,232,154,233,155,13,127,8,122,236,158,237,159,9,123,239,157,11,121,10,120,238,156,251,137,31,109,30,108,250,136,28,110,248,138,249,139,29,111,24,106,252,142,253,143,25,107,255,141,27,105,26,104,254,140,16,98,244,134,245,135,17,99,247,133,19,97,18,96,246,132,243,129,23);
yyy[115]=new Array(0,115,230,149,225,146,7,116,239,156,9,122,14,125,232,155,243,128,21,102,18,97,244,135,28,111,250,137,253,142,27,104,203,184,45,94,42,89,204,191,36,87,194,177,197,182,35,80,56,75,222,173,217,170,63,76,215,164,49,66,54,69,208,163,187,200,93,46,90,41,188,207,84,39,178,193,181,198,83,32,72,59,174,221,169,218,79,60,167,212,65,50,70,53,160,211,112,3,150,229,145,226,119,4,159,236,121,10,126,13,152,235,131,240,101,22);
yyy[116]=new Array(0,116,232,156,253,137,21,97,215,163,63,75,42,94,194,182,131,247,107,31,126,10,150,226,84,32,188,200,169,221,65,53,43,95,195,183,214,162,62,74,252,136,20,96,1,117,233,157,168,220,64,52,85,33,189,201,127,11,151,227,130,246,106,30,86,34,190,202,171,223,67,55,129,245,105,29,124,8,148,224,213,161,61,73,40,92,192,180,2,118,234,158,255,139,23,99,125,9,149,225,128,244,104,28,170,222,66,54,87,35,191,203,254,138,22,98,3);
yyy[117]=new Array(0,117,234,159,249,140,19,102,223,170,53,64,38,83,204,185,147,230,121,12,106,31,128,245,76,57,166,211,181,192,95,42,11,126,225,148,242,135,24,109,212,161,62,75,45,88,199,178,152,237,114,7,97,20,139,254,71,50,173,216,190,203,84,33,22,99,252,137,239,154,5,112,201,188,35,86,48,69,218,175,133,240,111,26,124,9,150,227,90,47,176,197,163,214,73,60,29,104,247,130,228,145,14,123,194,183,40,93,59,78,209,164,142,251,100,17,119,2);
yyy[118]=new Array(0,118,236,154,245,131,25,111,199,177,43,93,50,68,222,168,163,213,79,57,86,32,186,204,100,18,136,254,145,231,125,11,107,29,135,241,158,232,114,4,172,218,64,54,89,47,181,195,200,190,36,82,61,75,209,167,15,121,227,149,250,140,22,96,214,160,58,76,35,85,207,185,17,103,253,139,228,146,8,126,117,3,153,239,128,246,108,26,178,196,94,40,71,49,171,221,189,203,81,39,72,62,164,210,122,12,150,224,143,249,99,21,30,104,242,132,235,157,7);
yyy[119]=new Array(0,119,238,153,241,134,31,104,207,184,33,86,62,73,208,167,179,196,93,42,66,53,172,219,124,11,146,229,141,250,99,20,75,60,165,210,186,205,84,35,132,243,106,29,117,2,155,236,248,143,22,97,9,126,231,144,55,64,217,174,198,177,40,95,150,225,120,15,103,16,137,254,89,46,183,192,168,223,70,49,37,82,203,188,212,163,58,77,234,157,4,115,27,108,245,130,221,170,51,68,44,91,194,181,18,101,252,139,227,148,13,122,110,25,128,247,159,232,113,6);
yyy[120]=new Array(0,120,240,136,205,181,61,69,183,207,71,63,122,2,138,242,67,59,179,203,142,246,126,6,244,140,4,124,57,65,201,177,134,254,118,14,75,51,187,195,49,73,193,185,252,132,12,116,197,189,53,77,8,112,248,128,114,10,130,250,191,199,79,55,33,89,209,169,236,148,28,100,150,238,102,30,91,35,171,211,98,26,146,234,175,215,95,39,213,173,37,93,24,96,232,144,167,223,87,47,106,18,154,226,16,104,224,152,221,165,45,85,228,156,20,108,41,81,217,161,83);
yyy[121]=new Array(0,121,242,139,201,176,59,66,191,198,77,52,118,15,132,253,83,42,161,216,154,227,104,17,236,149,30,103,37,92,215,174,166,223,84,45,111,22,157,228,25,96,235,146,208,169,34,91,245,140,7,126,60,69,206,183,74,51,184,193,131,250,113,8,97,24,147,234,168,209,90,35,222,167,44,85,23,110,229,156,50,75,192,185,251,130,9,112,141,244,127,6,68,61,182,207,199,190,53,76,14,119,252,133,120,1,138,243,177,200,67,58,148,237,102,31,93,36,175,214,43,82);
yyy[122]=new Array(0,122,244,142,197,191,49,75,167,221,83,41,98,24,150,236,99,25,151,237,166,220,82,40,196,190,48,74,1,123,245,143,198,188,50,72,3,121,247,141,97,27,149,239,164,222,80,42,165,223,81,43,96,26,148,238,2,120,246,140,199,189,51,73,161,219,85,47,100,30,144,234,6,124,242,136,195,185,55,77,194,184,54,76,7,125,243,137,101,31,145,235,160,218,84,46,103,29,147,233,162,216,86,44,192,186,52,78,5,127,241,139,4,126,240,138,193,187,53,79,163,217,87);
yyy[123]=new Array(0,123,246,141,193,186,55,76,175,212,89,34,110,21,152,227,115,8,133,254,178,201,68,63,220,167,42,81,29,102,235,144,230,157,16,107,39,92,209,170,73,50,191,196,136,243,126,5,149,238,99,24,84,47,162,217,58,65,204,183,251,128,13,118,225,154,23,108,32,91,214,173,78,53,184,195,143,244,121,2,146,233,100,31,83,40,165,222,61,70,203,176,252,135,10,113,7,124,241,138,198,189,48,75,168,211,94,37,105,18,159,228,116,15,130,249,181,206,67,56,219,160,45,86);
yyy[124]=new Array(0,124,248,132,221,161,37,89,151,235,111,19,74,54,178,206,3,127,251,135,222,162,38,90,148,232,108,16,73,53,177,205,6,122,254,130,219,167,35,95,145,237,105,21,76,48,180,200,5,121,253,129,216,164,32,92,146,238,106,22,79,51,183,203,12,112,244,136,209,173,41,85,155,231,99,31,70,58,190,194,15,115,247,139,210,174,42,86,152,228,96,28,69,57,189,193,10,118,242,142,215,171,47,83,157,225,101,25,64,60,184,196,9,117,241,141,212,168,44,80,158,226,102,26,67);
yyy[125]=new Array(0,125,250,135,217,164,35,94,159,226,101,24,70,59,188,193,19,110,233,148,202,183,48,77,140,241,118,11,85,40,175,210,38,91,220,161,255,130,5,120,185,196,67,62,96,29,154,231,53,72,207,178,236,145,22,107,170,215,80,45,115,14,137,244,76,49,182,203,149,232,111,18,211,174,41,84,10,119,240,141,95,34,165,216,134,251,124,1,192,189,58,71,25,100,227,158,106,23,144,237,179,206,73,52,245,136,15,114,44,81,214,171,121,4,131,254,160,221,90,39,230,155,28,97,63,66);
yyy[126]=new Array(0,126,252,130,213,171,41,87,135,249,123,5,82,44,174,208,35,93,223,161,246,136,10,116,164,218,88,38,113,15,141,243,70,56,186,196,147,237,111,17,193,191,61,67,20,106,232,150,101,27,153,231,176,206,76,50,226,156,30,96,55,73,203,181,140,242,112,14,89,39,165,219,11,117,247,137,222,160,34,92,175,209,83,45,122,4,134,248,40,86,212,170,253,131,1,127,202,180,54,72,31,97,227,157,77,51,177,207,152,230,100,26,233,151,21,107,60,66,192,190,110,16,146,236,187,197,71);
yyy[127]=new Array(0,127,254,129,209,174,47,80,143,240,113,14,94,33,160,223,51,76,205,178,226,157,28,99,188,195,66,61,109,18,147,236,102,25,152,231,183,200,73,54,233,150,23,104,56,71,198,185,85,42,171,212,132,251,122,5,218,165,36,91,11,116,245,138,204,179,50,77,29,98,227,156,67,60,189,194,146,237,108,19,255,128,1,126,46,81,208,175,112,15,142,241,161,222,95,32,170,213,84,43,123,4,133,250,37,90,219,164,244,139,10,117,153,230,103,24,72,55,182,201,22,105,232,151,199,184,57,70);
yyy[128]=new Array(0,128,45,173,90,218,119,247,180,52,153,25,238,110,195,67,69,197,104,232,31,159,50,178,241,113,220,92,171,43,134,6,138,10,167,39,208,80,253,125,62,190,19,147,100,228,73,201,207,79,226,98,149,21,184,56,123,251,86,214,33,161,12,140,57,185,20,148,99,227,78,206,141,13,160,32,215,87,250,122,124,252,81,209,38,166,11,139,200,72,229,101,146,18,191,63,179,51,158,30,233,105,196,68,7,135,42,170,93,221,112,240,246,118,219,91,172,44,129,1,66,194,111,239,24,152,53,181,114);
yyy[129]=new Array(0,129,47,174,94,223,113,240,188,61,147,18,226,99,205,76,85,212,122,251,11,138,36,165,233,104,198,71,183,54,152,25,170,43,133,4,244,117,219,90,22,151,57,184,72,201,103,230,255,126,208,81,161,32,142,15,67,194,108,237,29,156,50,179,121,248,86,215,39,166,8,137,197,68,234,107,155,26,180,53,44,173,3,130,114,243,93,220,144,17,191,62,206,79,225,96,211,82,252,125,141,12,162,35,111,238,64,193,49,176,30,159,134,7,169,40,216,89,247,118,58,187,21,148,100,229,75,202,242,115);
yyy[130]=new Array(0,130,41,171,82,208,123,249,164,38,141,15,246,116,223,93,101,231,76,206,55,181,30,156,193,67,232,106,147,17,186,56,202,72,227,97,152,26,177,51,110,236,71,197,60,190,21,151,175,45,134,4,253,127,212,86,11,137,34,160,89,219,112,242,185,59,144,18,235,105,194,64,29,159,52,182,79,205,102,228,220,94,245,119,142,12,167,37,120,250,81,211,42,168,3,129,115,241,90,216,33,163,8,138,215,85,254,124,133,7,172,46,22,148,63,189,68,198,109,239,178,48,155,25,224,98,201,75,95,221,118);
yyy[131]=new Array(0,131,43,168,86,213,125,254,172,47,135,4,250,121,209,82,117,246,94,221,35,160,8,139,217,90,242,113,143,12,164,39,234,105,193,66,188,63,151,20,70,197,109,238,16,147,59,184,159,28,180,55,201,74,226,97,51,176,24,155,101,230,78,205,249,122,210,81,175,44,132,7,85,214,126,253,3,128,40,171,140,15,167,36,218,89,241,114,32,163,11,136,118,245,93,222,19,144,56,187,69,198,110,237,191,60,148,23,233,106,194,65,102,229,77,206,48,179,27,152,202,73,225,98,156,31,183,52,223,92,244,119);
yyy[132]=new Array(0,132,37,161,74,206,111,235,148,16,177,53,222,90,251,127,5,129,32,164,79,203,106,238,145,21,180,48,219,95,254,122,10,142,47,171,64,196,101,225,158,26,187,63,212,80,241,117,15,139,42,174,69,193,96,228,155,31,190,58,209,85,244,112,20,144,49,181,94,218,123,255,128,4,165,33,202,78,239,107,17,149,52,176,91,223,126,250,133,1,160,36,207,75,234,110,30,154,59,191,84,208,113,245,138,14,175,43,192,68,229,97,27,159,62,186,81,213,116,240,143,11,170,46,197,65,224,100,40,172,13,137,98);
yyy[133]=new Array(0,133,39,162,78,203,105,236,156,25,187,62,210,87,245,112,21,144,50,183,91,222,124,249,137,12,174,43,199,66,224,101,42,175,13,136,100,225,67,198,182,51,145,20,248,125,223,90,63,186,24,157,113,244,86,211,163,38,132,1,237,104,202,79,84,209,115,246,26,159,61,184,200,77,239,106,134,3,161,36,65,196,102,227,15,138,40,173,221,88,250,127,147,22,180,49,126,251,89,220,48,181,23,146,226,103,197,64,172,41,139,14,107,238,76,201,37,160,2,135,247,114,208,85,185,60,158,27,168,45,143,10,230,99);
yyy[134]=new Array(0,134,33,167,66,196,99,229,132,2,165,35,198,64,231,97,37,163,4,130,103,225,70,192,161,39,128,6,227,101,194,68,74,204,107,237,8,142,41,175,206,72,239,105,140,10,173,43,111,233,78,200,45,171,12,138,235,109,202,76,169,47,136,14,148,18,181,51,214,80,247,113,16,150,49,183,82,212,115,245,177,55,144,22,243,117,210,84,53,179,20,146,119,241,86,208,222,88,255,121,156,26,189,59,90,220,123,253,24,158,57,191,251,125,218,92,185,63,152,30,127,249,94,216,61,187,28,154,5,131,36,162,71,193,102);
yyy[135]=new Array(0,135,35,164,70,193,101,226,140,11,175,40,202,77,233,110,53,178,22,145,115,244,80,215,185,62,154,29,255,120,220,91,106,237,73,206,44,171,15,136,230,97,197,66,160,39,131,4,95,216,124,251,25,158,58,189,211,84,240,119,149,18,182,49,212,83,247,112,146,21,177,54,88,223,123,252,30,153,61,186,225,102,194,69,167,32,132,3,109,234,78,201,43,172,8,143,190,57,157,26,248,127,219,92,50,181,17,150,116,243,87,208,139,12,168,47,205,74,238,105,7,128,36,163,65,198,98,229,133,2,166,33,195,68,224,103);
yyy[136]=new Array(0,136,61,181,122,242,71,207,244,124,201,65,142,6,179,59,197,77,248,112,191,55,130,10,49,185,12,132,75,195,118,254,167,47,154,18,221,85,224,104,83,219,110,230,41,161,20,156,98,234,95,215,24,144,37,173,150,30,171,35,236,100,209,89,99,235,94,214,25,145,36,172,151,31,170,34,237,101,208,88,166,46,155,19,220,84,225,105,82,218,111,231,40,160,21,157,196,76,249,113,190,54,131,11,48,184,13,133,74,194,119,255,1,137,60,180,123,243,70,206,245,125,200,64,143,7,178,58,198,78,251,115,188,52,129,9,50);
yyy[137]=new Array(0,137,63,182,126,247,65,200,252,117,195,74,130,11,189,52,213,92,234,99,171,34,148,29,41,160,22,159,87,222,104,225,135,14,184,49,249,112,198,79,123,242,68,205,5,140,58,179,82,219,109,228,44,165,19,154,174,39,145,24,208,89,239,102,35,170,28,149,93,212,98,235,223,86,224,105,161,40,158,23,246,127,201,64,136,1,183,62,10,131,53,188,116,253,75,194,164,45,155,18,218,83,229,108,88,209,103,238,38,175,25,144,113,248,78,199,15,134,48,185,141,4,178,59,243,122,204,69,70,207,121,240,56,177,7,142,186,51);
yyy[138]=new Array(0,138,57,179,114,248,75,193,228,110,221,87,150,28,175,37,229,111,220,86,151,29,174,36,1,139,56,178,115,249,74,192,231,109,222,84,149,31,172,38,3,137,58,176,113,251,72,194,2,136,59,177,112,250,73,195,230,108,223,85,148,30,173,39,227,105,218,80,145,27,168,34,7,141,62,180,117,255,76,198,6,140,63,181,116,254,77,199,226,104,219,81,144,26,169,35,4,142,61,183,118,252,79,197,224,106,217,83,146,24,171,33,225,107,216,82,147,25,170,32,5,143,60,182,119,253,78,196,235,97,210,88,153,19,160,42,15,133,54);
yyy[139]=new Array(0,139,59,176,118,253,77,198,236,103,215,92,154,17,161,42,245,126,206,69,131,8,184,51,25,146,34,169,111,228,84,223,199,76,252,119,177,58,138,1,43,160,16,155,93,214,102,237,50,185,9,130,68,207,127,244,222,85,229,110,168,35,147,24,163,40,152,19,213,94,238,101,79,196,116,255,57,178,2,137,86,221,109,230,32,171,27,144,186,49,129,10,204,71,247,124,100,239,95,212,18,153,41,162,136,3,179,56,254,117,197,78,145,26,170,33,231,108,220,87,125,246,70,205,11,128,48,187,107,224,80,219,29,150,38,173,135,12,188,55);
yyy[140]=new Array(0,140,53,185,106,230,95,211,212,88,225,109,190,50,139,7,133,9,176,60,239,99,218,86,81,221,100,232,59,183,14,130,39,171,18,158,77,193,120,244,243,127,198,74,153,21,172,32,162,46,151,27,200,68,253,113,118,250,67,207,28,144,41,165,78,194,123,247,36,168,17,157,154,22,175,35,240,124,197,73,203,71,254,114,161,45,148,24,31,147,42,166,117,249,64,204,105,229,92,208,3,143,54,186,189,49,136,4,215,91,226,110,236,96,217,85,134,10,179,63,56,180,13,129,82,222,103,235,156,16,169,37,246,122,195,79,72,196,125,241,34);
yyy[141]=new Array(0,141,55,186,110,227,89,212,220,81,235,102,178,63,133,8,149,24,162,47,251,118,204,65,73,196,126,243,39,170,16,157,7,138,48,189,105,228,94,211,219,86,236,97,181,56,130,15,146,31,165,40,252,113,203,70,78,195,121,244,32,173,23,154,14,131,57,180,96,237,87,218,210,95,229,104,188,49,139,6,155,22,172,33,245,120,194,79,71,202,112,253,41,164,30,147,9,132,62,179,103,234,80,221,213,88,226,111,187,54,140,1,156,17,171,38,242,127,197,72,64,205,119,250,46,163,25,148,28,145,43,166,114,255,69,200,192,77,247,122,174,35);
yyy[142]=new Array(0,142,49,191,98,236,83,221,196,74,245,123,166,40,151,25,165,43,148,26,199,73,246,120,97,239,80,222,3,141,50,188,103,233,86,216,5,139,52,186,163,45,146,28,193,79,240,126,194,76,243,125,160,46,145,31,6,136,55,185,100,234,85,219,206,64,255,113,172,34,157,19,10,132,59,181,104,230,89,215,107,229,90,212,9,135,56,182,175,33,158,16,205,67,252,114,169,39,152,22,203,69,250,116,109,227,92,210,15,129,62,176,12,130,61,179,110,224,95,209,200,70,249,119,170,36,155,21,177,63,128,14,211,93,226,108,117,251,68,202,23,153,38);
yyy[143]=new Array(0,143,51,188,102,233,85,218,204,67,255,112,170,37,153,22,181,58,134,9,211,92,224,111,121,246,74,197,31,144,44,163,71,200,116,251,33,174,18,157,139,4,184,55,237,98,222,81,242,125,193,78,148,27,167,40,62,177,13,130,88,215,107,228,142,1,189,50,232,103,219,84,66,205,113,254,36,171,23,152,59,180,8,135,93,210,110,225,247,120,196,75,145,30,162,45,201,70,250,117,175,32,156,19,5,138,54,185,99,236,80,223,124,243,79,192,26,149,41,166,176,63,131,12,214,89,229,106,49,190,2,141,87,216,100,235,253,114,206,65,155,20,168,39);
yyy[144]=new Array(0,144,13,157,26,138,23,135,52,164,57,169,46,190,35,179,104,248,101,245,114,226,127,239,92,204,81,193,70,214,75,219,208,64,221,77,202,90,199,87,228,116,233,121,254,110,243,99,184,40,181,37,162,50,175,63,140,28,129,17,150,6,155,11,141,29,128,16,151,7,154,10,185,41,180,36,163,51,174,62,229,117,232,120,255,111,242,98,209,65,220,76,203,91,198,86,93,205,80,192,71,215,74,218,105,249,100,244,115,227,126,238,53,165,56,168,47,191,34,178,1,145,12,156,27,139,22,134,55,167,58,170,45,189,32,176,3,147,14,158,25,137,20,132,95);
yyy[145]=new Array(0,145,15,158,30,143,17,128,60,173,51,162,34,179,45,188,120,233,119,230,102,247,105,248,68,213,75,218,90,203,85,196,240,97,255,110,238,127,225,112,204,93,195,82,210,67,221,76,136,25,135,22,150,7,153,8,180,37,187,42,170,59,165,52,205,92,194,83,211,66,220,77,241,96,254,111,239,126,224,113,181,36,186,43,171,58,164,53,137,24,134,23,151,6,152,9,61,172,50,163,35,178,44,189,1,144,14,159,31,142,16,129,69,212,74,219,91,202,84,197,121,232,118,231,103,246,104,249,183,38,184,41,169,56,166,55,139,26,132,21,149,4,154,11,207,94);
yyy[146]=new Array(0,146,9,155,18,128,27,137,36,182,45,191,54,164,63,173,72,218,65,211,90,200,83,193,108,254,101,247,126,236,119,229,144,2,153,11,130,16,139,25,180,38,189,47,166,52,175,61,216,74,209,67,202,88,195,81,252,110,245,103,238,124,231,117,13,159,4,150,31,141,22,132,41,187,32,178,59,169,50,160,69,215,76,222,87,197,94,204,97,243,104,250,115,225,122,232,157,15,148,6,143,29,134,20,185,43,176,34,171,57,162,48,213,71,220,78,199,85,206,92,241,99,248,106,227,113,234,120,26,136,19,129,8,154,1,147,62,172,55,165,44,190,37,183,82,192,91);
yyy[147]=new Array(0,147,11,152,22,133,29,142,44,191,39,180,58,169,49,162,88,203,83,192,78,221,69,214,116,231,127,236,98,241,105,250,176,35,187,40,166,53,173,62,156,15,151,4,138,25,129,18,232,123,227,112,254,109,245,102,196,87,207,92,210,65,217,74,77,222,70,213,91,200,80,195,97,242,106,249,119,228,124,239,21,134,30,141,3,144,8,155,57,170,50,161,47,188,36,183,253,110,246,101,235,120,224,115,209,66,218,73,199,84,204,95,165,54,174,61,179,32,184,43,137,26,130,17,159,12,148,7,154,9,145,2,140,31,135,20,182,37,189,46,160,51,171,56,194,81,201,90);
yyy[148]=new Array(0,148,5,145,10,158,15,155,20,128,17,133,30,138,27,143,40,188,45,185,34,182,39,179,60,168,57,173,54,162,51,167,80,196,85,193,90,206,95,203,68,208,65,213,78,218,75,223,120,236,125,233,114,230,119,227,108,248,105,253,102,242,99,247,160,52,165,49,170,62,175,59,180,32,177,37,190,42,187,47,136,28,141,25,130,22,135,19,156,8,153,13,150,2,147,7,240,100,245,97,250,110,255,107,228,112,225,117,238,122,235,127,216,76,221,73,210,70,215,67,204,88,201,93,198,82,195,87,109,249,104,252,103,243,98,246,121,237,124,232,115,231,118,226,69,209,64,212,79);
yyy[149]=new Array(0,149,7,146,14,155,9,156,28,137,27,142,18,135,21,128,56,173,63,170,54,163,49,164,36,177,35,182,42,191,45,184,112,229,119,226,126,235,121,236,108,249,107,254,98,247,101,240,72,221,79,218,70,211,65,212,84,193,83,198,90,207,93,200,224,117,231,114,238,123,233,124,252,105,251,110,242,103,245,96,216,77,223,74,214,67,209,68,196,81,195,86,202,95,205,88,144,5,151,2,158,11,153,12,140,25,139,30,130,23,133,16,168,61,175,58,166,51,161,52,180,33,179,38,186,47,189,40,237,120,234,127,227,118,228,113,241,100,246,99,255,106,248,109,213,64,210,71,219,78);
yyy[150]=new Array(0,150,1,151,2,148,3,149,4,146,5,147,6,144,7,145,8,158,9,159,10,156,11,157,12,154,13,155,14,152,15,153,16,134,17,135,18,132,19,133,20,130,21,131,22,128,23,129,24,142,25,143,26,140,27,141,28,138,29,139,30,136,31,137,32,182,33,183,34,180,35,181,36,178,37,179,38,176,39,177,40,190,41,191,42,188,43,189,44,186,45,187,46,184,47,185,48,166,49,167,50,164,51,165,52,162,53,163,54,160,55,161,56,174,57,175,58,172,59,173,60,170,61,171,62,168,63,169,64,214,65,215,66,212,67,213,68,210,69,211,70,208,71,209,72,222,73,223,74,220,75);
yyy[151]=new Array(0,151,3,148,6,145,5,146,12,155,15,152,10,157,9,158,24,143,27,140,30,137,29,138,20,131,23,128,18,133,17,134,48,167,51,164,54,161,53,162,60,171,63,168,58,173,57,174,40,191,43,188,46,185,45,186,36,179,39,176,34,181,33,182,96,247,99,244,102,241,101,242,108,251,111,248,106,253,105,254,120,239,123,236,126,233,125,234,116,227,119,224,114,229,113,230,80,199,83,196,86,193,85,194,92,203,95,200,90,205,89,206,72,223,75,220,78,217,77,218,68,211,71,208,66,213,65,214,192,87,195,84,198,81,197,82,204,91,207,88,202,93,201,94,216,79,219,76,222,73,221,74);
yyy[152]=new Array(0,152,29,133,58,162,39,191,116,236,105,241,78,214,83,203,232,112,245,109,210,74,207,87,156,4,129,25,166,62,187,35,253,101,224,120,199,95,218,66,137,17,148,12,179,43,174,54,21,141,8,144,47,183,50,170,97,249,124,228,91,195,70,222,215,79,202,82,237,117,240,104,163,59,190,38,153,1,132,28,63,167,34,186,5,157,24,128,75,211,86,206,113,233,108,244,42,178,55,175,16,136,13,149,94,198,67,219,100,252,121,225,194,90,223,71,248,96,229,125,182,46,171,51,140,20,145,9,131,27,158,6,185,33,164,60,247,111,234,114,205,85,208,72,107,243,118,238,81,201,76,212,31);
yyy[153]=new Array(0,153,31,134,62,167,33,184,124,229,99,250,66,219,93,196,248,97,231,126,198,95,217,64,132,29,155,2,186,35,165,60,221,68,194,91,227,122,252,101,161,56,190,39,159,6,128,25,37,188,58,163,27,130,4,157,89,192,70,223,103,254,120,225,151,14,136,17,169,48,182,47,235,114,244,109,213,76,202,83,111,246,112,233,81,200,78,215,19,138,12,149,45,180,50,171,74,211,85,204,116,237,107,242,54,175,41,176,8,145,23,142,178,43,173,52,140,21,147,10,206,87,209,72,240,105,239,118,3,154,28,133,61,164,34,187,127,230,96,249,65,216,94,199,251,98,228,125,197,92,218,67,135,30);
yyy[154]=new Array(0,154,25,131,50,168,43,177,100,254,125,231,86,204,79,213,200,82,209,75,250,96,227,121,172,54,181,47,158,4,135,29,189,39,164,62,143,21,150,12,217,67,192,90,235,113,242,104,117,239,108,246,71,221,94,196,17,139,8,146,35,185,58,160,87,205,78,212,101,255,124,230,51,169,42,176,1,155,24,130,159,5,134,28,173,55,180,46,251,97,226,120,201,83,208,74,234,112,243,105,216,66,193,91,142,20,151,13,188,38,165,63,34,184,59,161,16,138,9,147,70,220,95,197,116,238,109,247,174,52,183,45,156,6,133,31,202,80,211,73,248,98,225,123,102,252,127,229,84,206,77,215,2,152,27);
yyy[155]=new Array(0,155,27,128,54,173,45,182,108,247,119,236,90,193,65,218,216,67,195,88,238,117,245,110,180,47,175,52,130,25,153,2,157,6,134,29,171,48,176,43,241,106,234,113,199,92,220,71,69,222,94,197,115,232,104,243,41,178,50,169,31,132,4,159,23,140,12,151,33,186,58,161,123,224,96,251,77,214,86,205,207,84,212,79,249,98,226,121,163,56,184,35,149,14,142,21,138,17,145,10,188,39,167,60,230,125,253,102,208,75,203,80,82,201,73,210,100,255,127,228,62,165,37,190,8,147,19,136,46,181,53,174,24,131,3,152,66,217,89,194,116,239,111,244,246,109,237,118,192,91,219,64,154,1,129,26);
yyy[156]=new Array(0,156,21,137,42,182,63,163,84,200,65,221,126,226,107,247,168,52,189,33,130,30,151,11,252,96,233,117,214,74,195,95,125,225,104,244,87,203,66,222,41,181,60,160,3,159,22,138,213,73,192,92,255,99,234,118,129,29,148,8,171,55,190,34,250,102,239,115,208,76,197,89,174,50,187,39,132,24,145,13,82,206,71,219,120,228,109,241,6,154,19,143,44,176,57,165,135,27,146,14,173,49,184,36,211,79,198,90,249,101,236,112,47,179,58,166,5,153,16,140,123,231,110,242,81,205,68,216,217,69,204,80,243,111,230,122,141,17,152,4,167,59,178,46,113,237,100,248,91,199,78,210,37,185,48,172,15);
yyy[157]=new Array(0,157,23,138,46,179,57,164,92,193,75,214,114,239,101,248,184,37,175,50,150,11,129,28,228,121,243,110,202,87,221,64,93,192,74,215,115,238,100,249,1,156,22,139,47,178,56,165,229,120,242,111,203,86,220,65,185,36,174,51,151,10,128,29,186,39,173,48,148,9,131,30,230,123,241,108,200,85,223,66,2,159,21,136,44,177,59,166,94,195,73,212,112,237,103,250,231,122,240,109,201,84,222,67,187,38,172,49,149,8,130,31,95,194,72,213,113,236,102,251,3,158,20,137,45,176,58,167,89,196,78,211,119,234,96,253,5,152,18,143,43,182,60,161,225,124,246,107,207,82,216,69,189,32,170,55,147,14);
yyy[158]=new Array(0,158,17,143,34,188,51,173,68,218,85,203,102,248,119,233,136,22,153,7,170,52,187,37,204,82,221,67,238,112,255,97,61,163,44,178,31,129,14,144,121,231,104,246,91,197,74,212,181,43,164,58,151,9,134,24,241,111,224,126,211,77,194,92,122,228,107,245,88,198,73,215,62,160,47,177,28,130,13,147,242,108,227,125,208,78,193,95,182,40,167,57,148,10,133,27,71,217,86,200,101,251,116,234,3,157,18,140,33,191,48,174,207,81,222,64,237,115,252,98,139,21,154,4,169,55,184,38,244,106,229,123,214,72,199,89,176,46,161,63,146,12,131,29,124,226,109,243,94,192,79,209,56,166,41,183,26,132,11);
yyy[159]=new Array(0,159,19,140,38,185,53,170,76,211,95,192,106,245,121,230,152,7,139,20,190,33,173,50,212,75,199,88,242,109,225,126,29,130,14,145,59,164,40,183,81,206,66,221,119,232,100,251,133,26,150,9,163,60,176,47,201,86,218,69,239,112,252,99,58,165,41,182,28,131,15,144,118,233,101,250,80,207,67,220,162,61,177,46,132,27,151,8,238,113,253,98,200,87,219,68,39,184,52,171,1,158,18,141,107,244,120,231,77,210,94,193,191,32,172,51,153,6,138,21,243,108,224,127,213,74,198,89,116,235,103,248,82,205,65,222,56,167,43,180,30,129,13,146,236,115,255,96,202,85,217,70,160,63,179,44,134,25,149,10);
yyy[160]=new Array(0,160,109,205,218,122,183,23,153,57,244,84,67,227,46,142,31,191,114,210,197,101,168,8,134,38,235,75,92,252,49,145,62,158,83,243,228,68,137,41,167,7,202,106,125,221,16,176,33,129,76,236,251,91,150,54,184,24,213,117,98,194,15,175,124,220,17,177,166,6,203,107,229,69,136,40,63,159,82,242,99,195,14,174,185,25,212,116,250,90,151,55,32,128,77,237,66,226,47,143,152,56,245,85,219,123,182,22,1,161,108,204,93,253,48,144,135,39,234,74,196,100,169,9,30,190,115,211,248,88,149,53,34,130,79,239,97,193,12,172,187,27,214,118,231,71,138,42,61,157,80,240,126,222,19,179,164,4,201,105,198);
yyy[161]=new Array(0,161,111,206,222,127,177,16,145,48,254,95,79,238,32,129,15,174,96,193,209,112,190,31,158,63,241,80,64,225,47,142,30,191,113,208,192,97,175,14,143,46,224,65,81,240,62,159,17,176,126,223,207,110,160,1,128,33,239,78,94,255,49,144,60,157,83,242,226,67,141,44,173,12,194,99,115,210,28,189,51,146,92,253,237,76,130,35,162,3,205,108,124,221,19,178,34,131,77,236,252,93,147,50,179,18,220,125,109,204,2,163,45,140,66,227,243,82,156,61,188,29,211,114,98,195,13,172,120,217,23,182,166,7,201,104,233,72,134,39,55,150,88,249,119,214,24,185,169,8,198,103,230,71,137,40,56,153,87,246,102,199);
yyy[162]=new Array(0,162,105,203,210,112,187,25,137,43,224,66,91,249,50,144,63,157,86,244,237,79,132,38,182,20,223,125,100,198,13,175,126,220,23,181,172,14,197,103,247,85,158,60,37,135,76,238,65,227,40,138,147,49,250,88,200,106,161,3,26,184,115,209,252,94,149,55,46,140,71,229,117,215,28,190,167,5,206,108,195,97,170,8,17,179,120,218,74,232,35,129,152,58,241,83,130,32,235,73,80,242,57,155,11,169,98,192,217,123,176,18,189,31,212,118,111,205,6,164,52,150,93,255,230,68,143,45,213,119,188,30,7,165,110,204,92,254,53,151,142,44,231,69,234,72,131,33,56,154,81,243,99,193,10,168,177,19,216,122,171,9,194);
yyy[163]=new Array(0,163,107,200,214,117,189,30,129,34,234,73,87,244,60,159,47,140,68,231,249,90,146,49,174,13,197,102,120,219,19,176,94,253,53,150,136,43,227,64,223,124,180,23,9,170,98,193,113,210,26,185,167,4,204,111,240,83,155,56,38,133,77,238,188,31,215,116,106,201,1,162,61,158,86,245,235,72,128,35,147,48,248,91,69,230,46,141,18,177,121,218,196,103,175,12,226,65,137,42,52,151,95,252,99,192,8,171,181,22,222,125,205,110,166,5,27,184,112,211,76,239,39,132,154,57,241,82,85,246,62,157,131,32,232,75,212,119,191,28,2,161,105,202,122,217,17,178,172,15,199,100,251,88,144,51,45,142,70,229,11,168,96,195);
yyy[164]=new Array(0,164,101,193,202,110,175,11,185,29,220,120,115,215,22,178,95,251,58,158,149,49,240,84,230,66,131,39,44,136,73,237,190,26,219,127,116,208,17,181,7,163,98,198,205,105,168,12,225,69,132,32,43,143,78,234,88,252,61,153,146,54,247,83,81,245,52,144,155,63,254,90,232,76,141,41,34,134,71,227,14,170,107,207,196,96,161,5,183,19,210,118,125,217,24,188,239,75,138,46,37,129,64,228,86,242,51,151,156,56,249,93,176,20,213,113,122,222,31,187,9,173,108,200,195,103,166,2,162,6,199,99,104,204,13,169,27,191,126,218,209,117,180,16,253,89,152,60,55,147,82,246,68,224,33,133,142,42,235,79,28,184,121,221,214);
yyy[165]=new Array(0,165,103,194,206,107,169,12,177,20,214,115,127,218,24,189,79,234,40,141,129,36,230,67,254,91,153,60,48,149,87,242,158,59,249,92,80,245,55,146,47,138,72,237,225,68,134,35,209,116,182,19,31,186,120,221,96,197,7,162,174,11,201,108,17,180,118,211,223,122,184,29,160,5,199,98,110,203,9,172,94,251,57,156,144,53,247,82,239,74,136,45,33,132,70,227,143,42,232,77,65,228,38,131,62,155,89,252,240,85,151,50,192,101,167,2,14,171,105,204,113,212,22,179,191,26,216,125,34,135,69,224,236,73,139,46,147,54,244,81,93,248,58,159,109,200,10,175,163,6,196,97,220,121,187,30,18,183,117,208,188,25,219,126,114,215);
yyy[166]=new Array(0,166,97,199,194,100,163,5,169,15,200,110,107,205,10,172,127,217,30,184,189,27,220,122,214,112,183,17,20,178,117,211,254,88,159,57,60,154,93,251,87,241,54,144,149,51,244,82,129,39,224,70,67,229,34,132,40,142,73,239,234,76,139,45,209,119,176,22,19,181,114,212,120,222,25,191,186,28,219,125,174,8,207,105,108,202,13,171,7,161,102,192,197,99,164,2,47,137,78,232,237,75,140,42,134,32,231,65,68,226,37,131,80,246,49,151,146,52,243,85,249,95,152,62,59,157,90,252,143,41,238,72,77,235,44,138,38,128,71,225,228,66,133,35,240,86,145,55,50,148,83,245,89,255,56,158,155,61,250,92,113,215,16,182,179,21,210);
yyy[167]=new Array(0,167,99,196,198,97,165,2,161,6,194,101,103,192,4,163,111,200,12,171,169,14,202,109,206,105,173,10,8,175,107,204,222,121,189,26,24,191,123,220,127,216,28,187,185,30,218,125,177,22,210,117,119,208,20,179,16,183,115,212,214,113,181,18,145,54,242,85,87,240,52,147,48,151,83,244,246,81,149,50,254,89,157,58,56,159,91,252,95,248,60,155,153,62,250,93,79,232,44,139,137,46,234,77,238,73,141,42,40,143,75,236,32,135,67,228,230,65,133,34,129,38,226,69,71,224,36,131,15,168,108,203,201,110,170,13,174,9,205,106,104,207,11,172,96,199,3,164,166,1,197,98,193,102,162,5,7,160,100,195,209,118,178,21,23,176,116,211);
yyy[168]=new Array(0,168,125,213,250,82,135,47,217,113,164,12,35,139,94,246,159,55,226,74,101,205,24,176,70,238,59,147,188,20,193,105,19,187,110,198,233,65,148,60,202,98,183,31,48,152,77,229,140,36,241,89,118,222,11,163,85,253,40,128,175,7,210,122,38,142,91,243,220,116,161,9,255,87,130,42,5,173,120,208,185,17,196,108,67,235,62,150,96,200,29,181,154,50,231,79,53,157,72,224,207,103,178,26,236,68,145,57,22,190,107,195,170,2,215,127,80,248,45,133,115,219,14,166,137,33,244,92,76,228,49,153,182,30,203,99,149,61,232,64,111,199,18,186,211,123,174,6,41,129,84,252,10,162,119,223,240,88,141,37,95,247,34,138,165,13,216,112,134);
yyy[169]=new Array(0,169,127,214,254,87,129,40,209,120,174,7,47,134,80,249,143,38,240,89,113,216,14,167,94,247,33,136,160,9,223,118,51,154,76,229,205,100,178,27,226,75,157,52,28,181,99,202,188,21,195,106,66,235,61,148,109,196,18,187,147,58,236,69,102,207,25,176,152,49,231,78,183,30,200,97,73,224,54,159,233,64,150,63,23,190,104,193,56,145,71,238,198,111,185,16,85,252,42,131,171,2,212,125,132,45,251,82,122,211,5,172,218,115,165,12,36,141,91,242,11,162,116,221,245,92,138,35,204,101,179,26,50,155,77,228,29,180,98,203,227,74,156,53,67,234,60,149,189,20,194,107,146,59,237,68,108,197,19,186,255,86,128,41,1,168,126,215,46,135);
yyy[170]=new Array(0,170,121,211,242,88,139,33,201,99,176,26,59,145,66,232,191,21,198,108,77,231,52,158,118,220,15,165,132,46,253,87,83,249,42,128,161,11,216,114,154,48,227,73,104,194,17,187,236,70,149,63,30,180,103,205,37,143,92,246,215,125,174,4,166,12,223,117,84,254,45,135,111,197,22,188,157,55,228,78,25,179,96,202,235,65,146,56,208,122,169,3,34,136,91,241,245,95,140,38,7,173,126,212,60,150,69,239,206,100,183,29,74,224,51,153,184,18,193,107,131,41,250,80,113,219,8,162,97,203,24,178,147,57,234,64,168,2,209,123,90,240,35,137,222,116,167,13,44,134,85,255,23,189,110,196,229,79,156,54,50,152,75,225,192,106,185,19,251,81,130);
yyy[171]=new Array(0,171,123,208,246,93,141,38,193,106,186,17,55,156,76,231,175,4,212,127,89,242,34,137,110,197,21,190,152,51,227,72,115,216,8,163,133,46,254,85,178,25,201,98,68,239,63,148,220,119,167,12,42,129,81,250,29,182,102,205,235,64,144,59,230,77,157,54,16,187,107,192,39,140,92,247,209,122,170,1,73,226,50,153,191,20,196,111,136,35,243,88,126,213,5,174,149,62,238,69,99,200,24,179,84,255,47,132,162,9,217,114,58,145,65,234,204,103,183,28,251,80,128,43,13,166,118,221,225,74,154,49,23,188,108,199,32,139,91,240,214,125,173,6,78,229,53,158,184,19,195,104,143,36,244,95,121,210,2,169,146,57,233,66,100,207,31,180,83,248,40,131);
yyy[172]=new Array(0,172,117,217,234,70,159,51,249,85,140,32,19,191,102,202,223,115,170,6,53,153,64,236,38,138,83,255,204,96,185,21,147,63,230,74,121,213,12,160,106,198,31,179,128,44,245,89,76,224,57,149,166,10,211,127,181,25,192,108,95,243,42,134,11,167,126,210,225,77,148,56,242,94,135,43,24,180,109,193,212,120,161,13,62,146,75,231,45,129,88,244,199,107,178,30,152,52,237,65,114,222,7,171,97,205,20,184,139,39,254,82,71,235,50,158,173,1,216,116,190,18,203,103,84,248,33,141,22,186,99,207,252,80,137,37,239,67,154,54,5,169,112,220,201,101,188,16,35,143,86,250,48,156,69,233,218,118,175,3,133,41,240,92,111,195,26,182,124,208,9,165,150);
yyy[173]=new Array(0,173,119,218,238,67,153,52,241,92,134,43,31,178,104,197,207,98,184,21,33,140,86,251,62,147,73,228,208,125,167,10,179,30,196,105,93,240,42,135,66,239,53,152,172,1,219,118,124,209,11,166,146,63,229,72,141,32,250,87,99,206,20,185,75,230,60,145,165,8,210,127,186,23,205,96,84,249,35,142,132,41,243,94,106,199,29,176,117,216,2,175,155,54,236,65,248,85,143,34,22,187,97,204,9,164,126,211,231,74,144,61,55,154,64,237,217,116,174,3,198,107,177,28,40,133,95,242,150,59,225,76,120,213,15,162,103,202,16,189,137,36,254,83,89,244,46,131,183,26,192,109,168,5,223,114,70,235,49,156,37,136,82,255,203,102,188,17,212,121,163,14,58,151);
yyy[174]=new Array(0,174,113,223,226,76,147,61,233,71,152,54,11,165,122,212,255,81,142,32,29,179,108,194,22,184,103,201,244,90,133,43,211,125,162,12,49,159,64,238,58,148,75,229,216,118,169,7,44,130,93,243,206,96,191,17,197,107,180,26,39,137,86,248,139,37,250,84,105,199,24,182,98,204,19,189,128,46,241,95,116,218,5,171,150,56,231,73,157,51,236,66,127,209,14,160,88,246,41,135,186,20,203,101,177,31,192,110,83,253,34,140,167,9,214,120,69,235,52,154,78,224,63,145,172,2,221,115,59,149,74,228,217,119,168,6,210,124,163,13,48,158,65,239,196,106,181,27,38,136,87,249,45,131,92,242,207,97,190,16,232,70,153,55,10,164,123,213,1,175,112,222,227,77,146);
yyy[175]=new Array(0,175,115,220,230,73,149,58,225,78,146,61,7,168,116,219,239,64,156,51,9,166,122,213,14,161,125,210,232,71,155,52,243,92,128,47,21,186,102,201,18,189,97,206,244,91,135,40,28,179,111,192,250,85,137,38,253,82,142,33,27,180,104,199,203,100,184,23,45,130,94,241,42,133,89,246,204,99,191,16,36,139,87,248,194,109,177,30,197,106,182,25,35,140,80,255,56,151,75,228,222,113,173,2,217,118,170,5,63,144,76,227,215,120,164,11,49,158,66,237,54,153,69,234,208,127,163,12,187,20,200,103,93,242,46,129,90,245,41,134,188,19,207,96,84,251,39,136,178,29,193,110,181,26,198,105,83,252,32,143,72,231,59,148,174,1,221,114,169,6,218,117,79,224,60,147);
yyy[176]=new Array(0,176,77,253,154,42,215,103,25,169,84,228,131,51,206,126,50,130,127,207,168,24,229,85,43,155,102,214,177,1,252,76,100,212,41,153,254,78,179,3,125,205,48,128,231,87,170,26,86,230,27,171,204,124,129,49,79,255,2,178,213,101,152,40,200,120,133,53,82,226,31,175,209,97,156,44,75,251,6,182,250,74,183,7,96,208,45,157,227,83,174,30,121,201,52,132,172,28,225,81,54,134,123,203,181,5,248,72,47,159,98,210,158,46,211,99,4,180,73,249,135,55,202,122,29,173,80,224,189,13,240,64,39,151,106,218,164,20,233,89,62,142,115,195,143,63,194,114,21,165,88,232,150,38,219,107,12,188,65,241,217,105,148,36,67,243,14,190,192,112,141,61,90,234,23,167,235);
yyy[177]=new Array(0,177,79,254,158,47,209,96,17,160,94,239,143,62,192,113,34,147,109,220,188,13,243,66,51,130,124,205,173,28,226,83,68,245,11,186,218,107,149,36,85,228,26,171,203,122,132,53,102,215,41,152,248,73,183,6,119,198,56,137,233,88,166,23,136,57,199,118,22,167,89,232,153,40,214,103,7,182,72,249,170,27,229,84,52,133,123,202,187,10,244,69,37,148,106,219,204,125,131,50,82,227,29,172,221,108,146,35,67,242,12,189,238,95,161,16,112,193,63,142,255,78,176,1,97,208,46,159,61,140,114,195,163,18,236,93,44,157,99,210,178,3,253,76,31,174,80,225,129,48,206,127,14,191,65,240,144,33,223,110,121,200,54,135,231,86,168,25,104,217,39,150,246,71,185,8,91,234);
yyy[178]=new Array(0,178,73,251,146,32,219,105,9,187,64,242,155,41,210,96,18,160,91,233,128,50,201,123,27,169,82,224,137,59,192,114,36,150,109,223,182,4,255,77,45,159,100,214,191,13,246,68,54,132,127,205,164,22,237,95,63,141,118,196,173,31,228,86,72,250,1,179,218,104,147,33,65,243,8,186,211,97,154,40,90,232,19,161,200,122,129,51,83,225,26,168,193,115,136,58,108,222,37,151,254,76,183,5,101,215,44,158,247,69,190,12,126,204,55,133,236,94,165,23,119,197,62,140,229,87,172,30,144,34,217,107,2,176,75,249,153,43,208,98,11,185,66,240,130,48,203,121,16,162,89,235,139,57,194,112,25,171,80,226,180,6,253,79,38,148,111,221,189,15,244,70,47,157,102,212,166,20,239);
yyy[179]=new Array(0,179,75,248,150,37,221,110,1,178,74,249,151,36,220,111,2,177,73,250,148,39,223,108,3,176,72,251,149,38,222,109,4,183,79,252,146,33,217,106,5,182,78,253,147,32,216,107,6,181,77,254,144,35,219,104,7,180,76,255,145,34,218,105,8,187,67,240,158,45,213,102,9,186,66,241,159,44,212,103,10,185,65,242,156,47,215,100,11,184,64,243,157,46,214,101,12,191,71,244,154,41,209,98,13,190,70,245,155,40,208,99,14,189,69,246,152,43,211,96,15,188,68,247,153,42,210,97,16,163,91,232,134,53,205,126,17,162,90,233,135,52,204,127,18,161,89,234,132,55,207,124,19,160,88,235,133,54,206,125,20,167,95,236,130,49,201,122,21,166,94,237,131,48,200,123,22,165,93,238);
yyy[180]=new Array(0,180,69,241,138,62,207,123,57,141,124,200,179,7,246,66,114,198,55,131,248,76,189,9,75,255,14,186,193,117,132,48,228,80,161,21,110,218,43,159,221,105,152,44,87,227,18,166,150,34,211,103,28,168,89,237,175,27,234,94,37,145,96,212,229,81,160,20,111,219,42,158,220,104,153,45,86,226,19,167,151,35,210,102,29,169,88,236,174,26,235,95,36,144,97,213,1,181,68,240,139,63,206,122,56,140,125,201,178,6,247,67,115,199,54,130,249,77,188,8,74,254,15,187,192,116,133,49,231,83,162,22,109,217,40,156,222,106,155,47,84,224,17,165,149,33,208,100,31,171,90,238,172,24,233,93,38,146,99,215,3,183,70,242,137,61,204,120,58,142,127,203,176,4,245,65,113,197,52,128,251);
yyy[181]=new Array(0,181,71,242,142,59,201,124,49,132,118,195,191,10,248,77,98,215,37,144,236,89,171,30,83,230,20,161,221,104,154,47,196,113,131,54,74,255,13,184,245,64,178,7,123,206,60,137,166,19,225,84,40,157,111,218,151,34,208,101,25,172,94,235,165,16,226,87,43,158,108,217,148,33,211,102,26,175,93,232,199,114,128,53,73,252,14,187,246,67,177,4,120,205,63,138,97,212,38,147,239,90,168,29,80,229,23,162,222,107,153,44,3,182,68,241,141,56,202,127,50,135,117,192,188,9,251,78,103,210,32,149,233,92,174,27,86,227,17,164,216,109,159,42,5,176,66,247,139,62,204,121,52,129,115,198,186,15,253,72,163,22,228,81,45,152,106,223,146,39,213,96,28,169,91,238,193,116,134,51,79,250);
yyy[182]=new Array(0,182,65,247,130,52,195,117,41,159,104,222,171,29,234,92,82,228,19,165,208,102,145,39,123,205,58,140,249,79,184,14,164,18,229,83,38,144,103,209,141,59,2
... (truncated)
javascript_obj0012_009.js pdf-javascript-stream PDF /JS object 12 at offset 0x12A1A 8595 bytes
SHA-256: 5076026448694df07d81995a6f52f2135c18b2bd6d0340fdaeebe7c5d9c2e63d
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
function MD5_init(){}
/*
 * A JavaScript implementation of the RSA Data security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}
javascript_obj0014_010.js pdf-javascript-stream PDF /JS object 14 at offset 0x135F8 1049 bytes
SHA-256: f667de1ba2f5689c2db6ca8efec22f4cae905543c7e55765301e47c9d3e39d66
Preview script
First 1,000 lines of the extracted script
function RSA_init(){}


// RSA, a suite of routines for performing RSA public-key computations in
// JavaScript.
//
// Requires BigInt.js and Barrett.js.
//
// Copyright 1998-2005 David Shapiro.
//
// You may use, re-use, abuse, copy, and modify this code to your liking, but
// please keep this header.
//
// Thanks!
//
// Dave Shapiro
// dave@ohdave.com


function encryptRSA16Bytes(a)
	// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
	// string after it has been converted to an array. This fixes an
	// incompatibility with Flash MX's ActionScript.
{
	var block = new BigInteger(a);
	var exponent = new BigInteger(formProperties.rsaKeyEncryptionExponent, 16);
	var modulus = new BigInteger(formProperties.rsaKeyModulus, 16);
	var crypt = block.modPowInt(exponent, modulus);
	var result = crypt.toByteArray();

	while (result.length > 128)
		result.shift();
	
	while (result.length < 128)
		result.unshift(0);
	for (var i = 0; i < result.length; i ++)
		if (result[i] < 0)
			result[i] = result[i] + 256;

	return result;
}
javascript_obj0016_011.js pdf-javascript-stream PDF /JS object 16 at offset 0x138AE 6511 bytes
SHA-256: b6b999b2adc788b5c0dc152162423f5f3b63e2f337dfedd2c9460233e3dfeb59
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 2 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
var serverOfflineMsg = undefined;
var transferMsg = undefined;
var submitting = false;
var timeOutPeriod = 30;
var submitThermometer;
var submitTimeoutObj;
var submitIntervalObj;
var submitSeconds;
var submitWebsave;

function submit(doWebsave, serverOfflineSubmit, transferSubmit, connectingSubmit)
{
    if (submitting) return;
    this.delay = true;

    serverOfflineMsg = serverOfflineSubmit;
    transferMsg = transferSubmit;
    submitting = true;
    submitWebsave = doWebsave;

    // if version 9 or later or running in a web browser, ping isn't required
    if (app.viewerVersion >= 9 || event.target.doc.external == true)
    {
        submitting = true;
        var dummyEvent = new Object();
        dummyEvent.value = "success";
        submitThermometer = app.thermometer;
        submitForm_pingValidate(dummyEvent);
    }
    else
    {
        // ping it
        event.target.doc.submitForm({
            cURL: "https://" + formProperties.serverHost + ":" + formProperties.serverPort + formProperties.pingServlet,
            aFields: new Array(),
            cSubmitAs: "XFDF"
        });

        var t = app.thermometer;
        t.begin();
        t.duration = timeOutPeriod;
        t.text = connectingSubmit;
        t.value = 0;
        submitThermometer = t;

        submitSeconds = 0;
        submitTimeoutObj = app.setTimeOut("submitForm_timeOut();", timeOutPeriod * 1000);
        submitIntervalObj = app.setInterval("submitForm_interval();", 1000);
    }

    this.delay = false;
}

function submitForm_interval()
{
    submitThermometer.value = submitSeconds++;
}

function submitForm_timeOut()
{
    app.alert(serverOfflineMsg);
    submitThermometer.end();
    submitting = false;
    app.clearInterval(submitIntervalObj);
    submitTimeoutObj = undefined;
    submitIntervalObj = undefined;
    submitThermometer.end();
}

function submitForm_pingValidate(event)
{
    if (submitting == false) return;

    if (submitTimeoutObj != undefined) app.clearTimeOut(submitTimeoutObj);
    if (submitIntervalObj != undefined) app.clearInterval(submitIntervalObj);
    submitTimeoutObj = undefined;
    submitIntervalObj = undefined;
    if (submitThermometer != undefined)
        submitThermometer.end();

    if (event.value == "success")
    {
        var fieldNames = new Array();

        for (var k in fields)
        {
            fieldNames.push(k);
        }
        fieldNames.push("swissformsFormId");
        fieldNames.push("swissformsFormVersion");
        fieldNames.push("swissformsServerId");
        fieldNames.push("clientInfo");
        fieldNames.push("swissformsSuisseIdNumber");
        fieldNames.push("swissformsSuisseIDPrefillResponse");
        fieldNames.push("extendedFormParams");


        submitThermometer.begin();
        submitThermometer.duration = fieldNames.length * 2;
        submitThermometer.text = transferMsg;
        submitThermometer.value = 0;


        if (!submitWebsave)
        {
            // format to export values
            submitForm_formatOutput();

            // set client info
            submitForm_setClientInfo();
        }

        var servlet;
        if (submitWebsave)
            servlet = formProperties.websaveServlet;
        else
            servlet = formProperties.submitServlet;
        // submit

        try
        {
            if (submitAsHTML != undefined && submitAsHTML == true)
            {
                this.submitForm({
                    cURL: "https://" + formProperties.serverHost + ":" + formProperties.serverPort + servlet,
                    bEmpty: true,
                    aFields: fieldNames,
                    cSubmitAs: "HTML",
                    cCharset: "utf-8"
                });
            }
            else
            {
                this.submitForm({
                    cURL: "https://" + formProperties.serverHost + ":" + formProperties.serverPort + servlet,
                    bEmpty: true,
                    aFields: fieldNames,
                    cSubmitAs: "XFDF"
                });
            }
        }
        catch(e)
        {
            app.alert("Unkown error while submitting the form.");
        }

        if (!submitWebsave)
        {
            // format back
            submitForm_formatBack();
        }

        submitThermometer.end();


        submitting = false;
        event.value = "";
    }
    else
    {
        app.alert(serverOfflineMsg);
        submitThermometer.end();
        submitting = false;
    }
}

function submitForm_setClientInfo()
{
    var field = getField("clientInfo");
    var fieldStr = app.language + ";" + app.platform + ";" + app.viewerType + ";" + app.viewerVariation + ";" + app.viewerVersion + ";" + app.formsVersion + ";" + app.openInPlace + ";" + this.external;
    field.value = fieldStr;
}

var submitForm_tempBuffer = new Array();
var submitForm_tempBufferMaxChars = new Array();

function submitForm_formatOutput()
{
    ignoreAllEvents = true;
    submitForm_tempBuffer = new Array();
    var counter = 0;
    for (var fieldName in fields)
    {
        submitThermometer.value = counter ++;

        var outputValue = fields[fieldName]["_formattedSubmit"];
        if (outputValue == null)
            outputValue = fields[fieldName]["_formatted"];

        if (outputValue != null)
        {
            var field = getField(fieldName);
            submitForm_tempBuffer[fieldName] = field.value;

            if (field.charLimit != 0)
            {
                submitForm_tempBufferMaxChars[fieldName] = field.charLimit;
                field.charLimit = 1000000000;
            }

            field.delay = true;
            field.value = outputValue + String.fromCharCode(65530) + submitForm_tempBuffer[fieldName];
        }
    }
}

function submitForm_formatBack()
{
    ignoreAllEvents = false;

    submitForm_formatingBack = true;
    var counter = submitThermometer.duration / 2;

    for (var fieldName in fields)
    {
        submitThermometer.value = counter ++;

        var outputValue = submitForm_tempBuffer[fieldName];
        if (outputValue != null)
        {
            var field = getField(fieldName);
            field.value = outputValue;
            field.delay = false;
        }

        var charLimitBefore = submitForm_tempBufferMaxChars[fieldName];
        if (charLimitBefore != undefined)
        {
            var field = getField(fieldName);
            field.charLimit = charLimitBefore;
        }
    }
    submitForm_formatingBack = false;
}
javascript_obj0018_012.js pdf-javascript-stream PDF /JS object 18 at offset 0x13F28 10822 bytes
SHA-256: 6bf6a9f966c7e84faccf5e1acbfdf2980a18334f7c940bcfc5fb9e40ee1ba433
Preview script
First 1,000 lines of the extracted script
var locales = new Array();

locales["root"] = new Array();

locales["root"]["percent"] = "%";
locales["root"]["perMill"] = "\u2030";
locales["root"]["exponential"] = "E";
locales["root"]["infinity"] = "\u221e";
locales["root"]["NaN"] = "\ufffd";
locales["root"]["minusSign"] = "-";
locales["root"]["zeroDigit"] = "0";
locales["root"]["decimalSeparator"] = ".";
locales["root"]["groupingSeparator"] = ",";
locales["root"]["digit"] = "#";
locales["root"]["percentFormat"] = "#,##0%";
locales["root"]["shortMonths"] = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", ""];
locales["root"]["months"] = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", ""];
locales["root"]["shortWeekdays"] = ["1", "2", "3", "4", "5", "6", "7"];
locales["root"]["weekdays"] = ["1", "2", "3", "4", "5", "6", "7"];
locales["root"]["minNumberOfDaysInFirstWeek"] = 1;
locales["root"]["firstDayOfWeek"] = "sun";
locales["root"]["eras"] = ["BC", "CE"];
locales["root"]["ampms"] = ["AM", "PM"];
locales["root"]["shortDateFormat"] = "yy/MM/dd";
locales["root"]["mediumDateFormat"] = "yyyy MMM d";
locales["root"]["longDateFormat"] = "yyyy MMMM d";
locales["root"]["fullDateFormat"] = "EEEE, yyyy MMMM dd";
locales["root"]["shortTimeFormat"] = "HH:mm";
locales["root"]["mediumTimeFormat"] = "HH:mm:ss";
locales["root"]["longTimeFormat"] = "HH:mm:ss z";
locales["root"]["fullTimeFormat"] = "HH:mm:ss z";

locales["de"] = new Array();

locales["de"]["decimalSeparator"] = ",";
locales["de"]["groupingSeparator"] = ".";
locales["de"]["shortMonths"] = ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez", ""];
locales["de"]["months"] = ["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember", ""];
locales["de"]["shortWeekdays"] = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"];
locales["de"]["weekdays"] = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"];
locales["de"]["minNumberOfDaysInFirstWeek"] = 4;
locales["de"]["firstDayOfWeek"] = "mon";
locales["de"]["eras"] = ["v. Chr.", "n. Chr."];
locales["de"]["ampms"] = ["vorm.", "nachm."];
locales["de"]["shortDateFormat"] = "dd.MM.yy";
locales["de"]["mediumDateFormat"] = "dd.MM.yyyy";
locales["de"]["longDateFormat"] = "d. MMMM yyyy";
locales["de"]["fullDateFormat"] = "EEEE, d. MMMM yyyy";
locales["de"]["fullTimeFormat"] = "H:mm' Uhr 'z";

locales["de-at"] = new Array();

locales["de-at"]["shortMonths"] = ["J\u00e4n", "", "M\u00e4r", "", "", "", "", "", "", "", "", "", ""];
locales["de-at"]["months"] = ["J\u00e4nner", "", "", "", "", "", "", "", "", "", "", "", ""];
locales["de-at"]["longDateFormat"] = "dd. MMMM yyyy";
locales["de-at"]["fullDateFormat"] = "EEEE, dd. MMMM yyyy";
locales["de-at"]["fullTimeFormat"] = "HH:mm' Uhr 'z";

locales["de-ch"] = new Array();

locales["de-ch"]["decimalSeparator"] = ".";
locales["de-ch"]["groupingSeparator"] = "'";

locales["de-li"] = new Array();

locales["de-li"]["decimalSeparator"] = ".";
locales["de-li"]["groupingSeparator"] = "'";

locales["de-de"] = new Array();


locales["de-de"]["shortMonths"] = ["", "", "M\u00e4r", "", "", "", "", "", "", "", "", "", ""];
locales["de-de"]["shortWeekdays"] = ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"];
locales["de-de"]["shortDateFormat"] = "d/MM/yy";
locales["de-de"]["mediumDateFormat"] = "d-MMM-yy";
locales["de-de"]["longDateFormat"] = "d MMMM yyyy";
locales["de-de"]["fullDateFormat"] = "EEEE d MMMM yyyy";
locales["de-de"]["fullTimeFormat"] = "HH 'h' mm 'min' ss 's' z";

locales["en"] = new Array();

locales["en"]["shortMonths"] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""];
locales["en"]["months"] = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""];
locales["en"]["shortWeekdays"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
locales["en"]["weekdays"] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
locales["en"]["eras"] = ["BC", "AD"];
locales["en"]["shortDateFormat"] = "M/d/yy";
locales["en"]["mediumDateFormat"] = "MMM d, yyyy";
locales["en"]["longDateFormat"] = "MMMM d, yyyy";
locales["en"]["fullDateFormat"] = "EEEE, MMMM d, yyyy";
locales["en"]["shortTimeFormat"] = "h:mm a";
locales["en"]["mediumTimeFormat"] = "h:mm:ss a";
locales["en"]["longTimeFormat"] = "h:mm:ss a z";
locales["en"]["fullTimeFormat"] = "h:mm:ss a z";

locales["en-be"] = new Array();

locales["en-be"]["decimalSeparator"] = ",";
locales["en-be"]["groupingSeparator"] = ".";
locales["en-be"]["minNumberOfDaysInFirstWeek"] = 4
locales["en-be"]["firstDayOfWeek"] = "mon";
locales["en-be"]["shortDateFormat"] = "dd/MM/yy";
locales["en-be"]["mediumDateFormat"] = "dd MMM yyyy";
locales["en-be"]["longDateFormat"] = "EEE d MMM yyyy";
locales["en-be"]["fullDateFormat"] = "EEEE d MMMM yyyy";
locales["en-be"]["shortTimeFormat"] = "HH:mm";
locales["en-be"]["mediumTimeFormat"] = "HH:mm:ss";
locales["en-be"]["longTimeFormat"] = "HH:mm:ss z";
locales["en-be"]["fullTimeFormat"] = "HH' h 'mm' min 'ss' s 'z";

locales["en-ca"] = new Array();

locales["en-ca"]["minNumberOfDaysInFirstWeek"] = 4;
locales["en-ca"]["shortDateFormat"] = "dd/MM/yy";
locales["en-ca"]["mediumDateFormat"] = "d-MMM-yy";

locales["en-gb"] = new Array();

locales["en-gb"]["firstDayOfWeek"] = "mon";
locales["en-gb"]["shortDateFormat"] = "dd/MM/yyyy";
locales["en-gb"]["mediumDateFormat"] = "d MMM yyyy";
locales["en-gb"]["longDateFormat"] = "d MMMM yyyy";
locales["en-gb"]["fullDateFormat"] = "EEEE, d MMMM yyyy";
locales["en-gb"]["shortTimeFormat"] = "HH:mm";
locales["en-gb"]["mediumTimeFormat"] = "HH:mm:ss";
locales["en-gb"]["longTimeFormat"] = "HH:mm:ss z";
locales["en-gb"]["fullTimeFormat"] = "HH:mm:ss z";

locales["en-ie"] = new Array();

locales["en-ie"]["ampms"] = ["a.m.", "p.m."];
locales["en-ie"]["shortDateFormat"] = "dd/MM/yyyy";
locales["en-ie"]["mediumDateFormat"] = "d MMM yyyy";
locales["en-ie"]["longDateFormat"] = "d MMMM yyyy";
locales["en-ie"]["fullDateFormat"] = "EEEE d MMMM yyyy";
locales["en-ie"]["shortTimeFormat"] = "HH:mm";
locales["en-ie"]["mediumTimeFormat"] = "HH:mm:ss";
locales["en-ie"]["longTimeFormat"] = "HH:mm:ss z";
locales["en-ie"]["fullTimeFormat"] = "HH:mm:ss z";


locales["es"] = new Array();

locales["es"]["decimalSeparator"] = ",";
locales["es"]["groupingSeparator"] = ".";
locales["es"]["shortMonths"] = ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic", ""];
locales["es"]["months"] = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre", ""];
locales["es"]["shortWeekdays"] = ["dom", "lun", "mar", "mi\u00e9", "jue", "vie", "s\u00e1b"];
locales["es"]["weekdays"] = ["domingo", "lunes", "martes", "mi\u00e9rcoles", "jueves", "viernes", "s\u00e1bado"];
locales["es"]["firstDayOfWeek"] = "mon";
locales["es"]["eras"] = ["a.C.", "d.C."];
locales["es"]["shortDateFormat"] = "d/MM/yy";
locales["es"]["mediumDateFormat"] = "dd-MMM-yy";
locales["es"]["longDateFormat"] = "d' de 'MMMM' de 'yyyy";
locales["es"]["fullDateFormat"] = "EEEE d' de 'MMMM' de 'yyyy";
locales["es"]["fullTimeFormat"] = "HH'H'mm''ss\" z";

locales["es-es"] = new Array();

locales["es-es"]["shortDateFormat"] = "dd/MM/yy";
locales["es-es"]["mediumDateFormat"] = "dd/MM/yyyy";
locales["es-es"]["shortTimeFormat"] = "H:mm";
locales["es-es"]["mediumTimeFormat"] = "H:mm:ss";

locales["fr"] = new Array();

locales["fr"]["decimalSeparator"] = ",";
locales["fr"]["groupingSeparator"] = "\u00a0";
locales["fr"]["shortMonths"] = ["janv.", "f\u00e9vr.", "mars", "avr.", "mai", "juin", "juil.", "ao\u00fbt", "sept.", "oct.", "nov.", "d\u00e9c.", ""];
locales["fr"]["months"] = ["janvier", "f\u00e9vrier", "mars", "avril", "mai", "juin", "juillet", "ao\u00fbt", "septembre", "octobre", "novembre", "d\u00e9cembre", ""];
locales["fr"]["shortWeekdays"] = ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."];
locales["fr"]["weekdays"] = ["dimanche","lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
locales["fr"]["minNumberOfDaysInFirstWeek"] = 4;
locales["fr"]["firstDayOfWeek"] = "mon";
locales["fr"]["eras"] = ["av. J.-C.", "apr. J.-C."];
locales["fr"]["shortDateFormat"] = "dd/MM/yy";
locales["fr"]["mediumDateFormat"] = "d MMM yy";
locales["fr"]["longDateFormat"] = "d MMMM yyyy";
locales["fr"]["fullDateFormat"] = "EEEE d MMMM yyyy";
locales["fr"]["fullTimeFormat"] = "HH' h 'mm z";

locales["fr-lu"] = new Array();

locales["fr-lu"]["groupingSeparator"] = ".";

locales["fr-be"] = new Array();

locales["fr-be"]["groupingSeparator"] = ".";
locales["fr-be"]["shortDateFormat"] = "d/MM/yy";
locales["fr-be"]["mediumDateFormat"] = "dd-MMM-yy";
locales["fr-be"]["fullTimeFormat"] = "H' h 'mm' min 'ss' s 'z";

locales["fr-ca"] = new Array();

locales["fr-ca"]["firstDayOfWeek"] = "sun";
locales["fr-ca"]["shortDateFormat"] = "yy-MM-dd";
locales["fr-ca"]["mediumDateFormat"] = "yy-MM-dd";
locales["fr-ca"]["fullTimeFormat"] = "HH' h 'mm' min 'ss' s 'z";

locales["fr-ch"] = new Array();

locales["fr-ch"]["decimalSeparator"] = ".";
locales["fr-ch"]["groupingSeparator"] = "'";
locales["fr-ch"]["shortDateFormat"] = "dd.MM.yy";
locales["fr-ch"]["fullDateFormat"] = "EEEE, d MMMM yyyy";
locales["fr-ch"]["fullTimeFormat"] = "HH.mm:ss' h' z";

locales["it"] = new Array();

locales["it"]["decimalSeparator"] = ",";
locales["it"]["groupingSeparator"] = ".";
locales["it"]["shortMonths"] = ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic", ""];
locales["it"]["months"] = ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre", ""];
locales["it"]["shortWeekdays"] = ["dom", "lun", "mar", "mer", "gio", "ven", "sab"];
locales["it"]["weekdays"] = ["domenica", "luned\u00ec", "marted\u00ec", "mercoled\u00ec", "gioved\u00ec", "venerd\u00ec", "sabato"];
locales["it"]["minNumberOfDaysInFirstWeek"] = 4;
locales["it"]["firstDayOfWeek"] = "mon";
locales["it"]["eras"] = ["aC", "dC"];
locales["it"]["ampms"] = ["m.", "p."];
locales["it"]["shortDateFormat"] = "dd/MM/yy";
locales["it"]["mediumDateFormat"] = "dd/MMM/yy";
locales["it"]["longDateFormat"] = "dd MMMM yyyy";
locales["it"]["fullDateFormat"] = "EEEE d MMMM yyyy";

locales["it-it"] = new Array();

locales["it-it"]["longTimeFormat"] = "H:mm:ss z";

locales["it-ch"] = new Array();

locales["it-ch"]["decimalSeparator"] = ".";
locales["it-ch"]["groupingSeparator"] = "'";
locales["it-ch"]["shortDateFormat"] = "dd.MM.yy";
locales["it-ch"]["mediumDateFormat"] = "d-MMM-yy";
locales["it-ch"]["longDateFormat"] = "d MMMM yyyy";
locales["it-ch"]["fullDateFormat"] = "EEEE, d MMMM yyyy";
locales["it-ch"]["fullTimeFormat"] = "HH.mm:ss' h' z";
javascript_obj0020_013.js pdf-javascript-stream PDF /JS object 20 at offset 0x14766 16050 bytes
SHA-256: 0ef5292eaf41a7acfb5be96479c28e894fecc14d034141148df12559285bac3f
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
var inValidate = false;
var validateEvent = undefined;

function fieldValue(id)
{
	var f = getFieldById(id);

	if (f != undefined)
	{
		// check for validity
		var readOnly = false;
		var field = getField(f.name);
		if (field != undefined)
			readOnly = field.readonly;
			
		if (fields[f.name]["fieldType"] == "checkbox")
		{
			return f.value;
		}
		
		var rValue;
		if (fields[f.name]["_value"] != undefined && fields[f.name]["_value"]["type"] != undefined)
		{
			rValue = fields[f.name]["_value"].getValue();
		}
		else if(inValidate && id == fields[validateEvent.target.name]["id"])
		{
			rValue = validateEvent.value;
		}
		else if (fields[f.name]["fieldType"] == "combobox")
		{
			rValue = f.valueAsString;
			if (rValue == COMBOBOX_EMPTY_VALUE)
				rValue = "";
		}
		else
		{
			rValue = f.valueAsString;
		}
		
		if (fields[f.name]["validity"] == INVALID && readOnly == false)
		{
			var invalidityReason = INVALIDITY_REASON_OTHER;
			if (fields[f.name]["_invalidityReason"] != undefined && fields[f.name]["_invalidityReason"] == INVALIDITY_REASON_INPUT)
				invalidityReason = INVALIDITY_REASON_INPUT;

			if (!CALCULATE_RULES && invalidityReason == INVALIDITY_REASON_INPUT)
			{
				CANCEL_CALCULATION = true;
				return "";
			}
			else if (CALCULATE_RULES)
			{
				return rValue;
			}
		}
		
		if (fields[f.name]["_empty"] == true)
		{
			CALCULATION_WITH_FIELD = true;
			CALCULATION_ALL_FILLED = false;
		}
		else
		{
			CALCULATION_WITH_FIELD = true;
			CALCULATION_ONE_FILLED = true;
		}
		
		return rValue;
	}
	else
	{
		return "";
	}
}

function getNumber(n)
{
	if (typeof(n) == 'number')
		return n;
	else
	{
		var number = parseNumber(n);
		if (number == undefined)
			return 0;
		else
			return number;
	}
}

function getDate(date)
{
	if (date instanceof Date)
		return date;
	else
	{
		var d = parseDate(date);
		if (d == undefined)
			return new Date(1970, 0, 1);
		else
			return d.date;
	}	
}

function getTime(time)
{
	if (time instanceof Date)
		return time;
	else
	{
		var d = parseTime(time);
		if (d == undefined)
			return new Date(2008, 0, 1, 0, 0, 0);
		else
			return d;
	}
}

function formatMediumDate(date)
{
	return formatDate(date, cldr["calendar_gregorian"]["dateFormats"]["medium"]);
}

function formatMediumTime(time)
{
	return formatDate(time, cldr["calendar_gregorian"]["timeFormats"]["medium"]);
}

function _format_number(n, pattern)
{
	var s = getNumber(n);
	return formatNumber(s, pattern);
}

function _format_currency(n, currency, formatType, numberPattern, currencyPattern)
{
	var s = getNumber(n);
	return currencyCldr_formatGeneral(s, currency, true, numberPattern, currencyPattern, formatType);
}

function isString(variable)
{
	return typeof(variable) == 'string';
}


function __add(p1, p2)
{
	var isString1 = isString(p1);
	var isString2 = isString(p2);
	if (isString1 && p1 == "") return p2;
	if (isString2 && p2 == "") return p1;
	if (isString1 || isString2) return "" + p1 + p2;
	
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;

	return s1 + s2;
}

function __subtract(p1, p2)
{	
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;

	return s1 - s2;
}

function __multiply(p1, p2)
{
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;

	return s1 * s2;
}

function __divide(p1, p2)
{
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;

	if (s2 == 0) return NaN;
	
	return s1 / s2;
}

function _abs(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;

	return Math.abs(s1);
}

function _acos(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;

	return Math.acos(s1);
}

function _asin(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;

	return Math.asin(s1);
}

function _atan(p1)
{	
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;

	return Math.atan(s1);
}

function _ceil(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;

	return Math.ceil(s1);
}

function _cos(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return NaN;
	if(s1 == Number.NEGATIVE_INFINITY) return NaN;

	return Math.cos(s1);
}

function _exp(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY) return 0;

	return Math.exp(s1);
}

function _floor(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;

	return Math.floor(s1);
}

function _log(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY) return NaN;

	return Math.log(s1);
}

function _max()
{
	/*var p1Empty = isString(p1) && p1 == "";
	var p2Empty = isString(p2) && p2 == "";
	if (p1Empty && !p2Empty) return p2;
	if (p2Empty && !p1Empty) return p1;
	if (p1Empty && p2Empty) return "";
	
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;
	if(s1 == Number.NEGATIVE_INFINITY && s2 != Number.NEGATIVE_INFINITY) return s2;
	if(s2 == Number.NEGATIVE_INFINITY && s1 != Number.NEGATIVE_INFINITY) return s1;
	if(s2 == Number.NEGATIVE_INFINITY && s1 == Number.NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;
	if(s1 == Number.POSITIVE_INFINITY || s2 == Number.POSITVE_INFINITY) return Number.POSITIVE_INFINITY;

	return Math.max(s1, s2);*/
	
	var rValue;
	for (var i = 0; i < arguments.length; i ++)
	{
		var pn = arguments[i];
		var isEmpty = isString(pn) && pn == "";
		if (isEmpty)
			continue;
		else
		{
			var number = getNumber(pn);
			if (rValue == undefined || number > rValue)
				rValue = number;
		}
	}
	
	if (rValue == undefined)
		return 0;
	else
		return rValue;
}

function _min()
{
	/*var p1Empty = isString(p1) && p1 == "";
	var p2Empty = isString(p2) && p2 == "";
	if (p1Empty && !p2Empty) return p2;
	if (p2Empty && !p1Empty) return p1;
	if (p1Empty && p2Empty) return "";
	
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY && s2 != Number.POSITIVE_INFINITY) return s2;
	if(s2 == Number.POSITIVE_INFINITY && s1 != Number.POSITIVE_INFINITY) return s1;
	if(s2 == Number.POSITIVE_INFINITY && s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY || s2 == Number.NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;

	return Math.min(s1, s2);*/
	
	var rValue;
	for (var i = 0; i < arguments.length; i ++)
	{
		var pn = arguments[i];
		var isEmpty = isString(pn) && pn == "";
		if (isEmpty)
			continue;
		else
		{
			var number = getNumber(pn);
			if (rValue == undefined || number < rValue)
				rValue = number;
		}
	}
	
	if (rValue == undefined)
		return 0;
	else
		return rValue;
}

function _average()
{
	var numArguments = 0;
	var sum = 0;
	for (var i = 0; i < arguments.length; i ++)
	{
		var pn = arguments[i];
		if (isString(pn) && pn == "")
			continue;
		else
		{
			numArguments ++;
			sum += getNumber(pn);
		}
	}
	
	if (numArguments > 0)
		return sum / numArguments;
	else
		return 0;
}

function _power(p1, p2)
{
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);

	if(isNaN(s1) || isNaN(s2)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY || s2 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;

	return Math.pow(s1, s2);
}

function _random()
{
	return Math.random();
}

function _round(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return s1;
	if(s1 == Number.NEGATIVE_INFINITY) return s1;

	return Math.round(s1);
}

function _sin(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return NaN;
	if(s1 == Number.NEGATIVE_INFINITY) return NaN;

	return Math.sin(s1);
}

function _sqrt(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
	if(s1 == Number.NEGATIVE_INFINITY || s1 < 0) return NaN;

	return Math.sqrt(s1);
}

function _tan(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return NaN;
	if(s1 == Number.POSITIVE_INFINITY) return NaN;
	if(s1 == Number.NEGATIVE_INFINITY) return NaN;

	return Math.tan(s1);
}

function _char_at(p1, p2)
{
	var s1 = String(p1);
	var s2 = getNumber(p2);

	if(isNaN(s2)) return "";
	if(s2 == Number.POSITIVE_INFINITY) return "";
	if(s2 == Number.NEGATIVE_INFINITY) return "";

	return s1.charAt(s2);
}

function _charcode_at(p1, p2)
{
	var s1 = String(p1);
	var s2 = getNumber(p2);

	if(isNaN(s2)) return NaN;
	if(s2 == Number.POSITIVE_INFINITY) return NaN;
	if(s2 == Number.NEGATIVE_INFINITY) return NaN;

	return s1.charCodeAt(s2);
}

function _concat()
{
	var numArguments = 0;
	var sum = "";
	for (var i = 0; i < arguments.length; i ++)
	{
		var pn = arguments[i];
		var addStr = String(pn);
		sum += addStr;
	}
	
	return sum;
}

function _from_charcode(p1)
{
	var s1 = getNumber(p1);

	if(isNaN(s1)) return "";
	if(s1 == Number.POSITIVE_INFINITY) return "";
	if(s1 == Number.NEGATIVE_INFINITY) return "";

	return String.fromCharCode(s1);
}

function _index_of(p1, p2, p3)
{
	var s1 = String(p1);
	var s2 = String(p2);
	var s3 = getNumber(p3);

	return s1.indexOf(s2, s3);
}

function _last_index_of(p1, p2)
{
	var s1 = String(p1);
	var s2 = String(p2);

	return s1.lastIndexOf(s2);
}

function _substr(p1, p2, p3)
{
	var s1 = String(p1);
	var s2 = getNumber(p2);
	var s3 = getNumber(p3);

	if(isNaN(s3) || isNaN(s2)) return "";
	if(s3 == Number.POSITIVE_INFINITY || s2 == Number.POSITIVE_INFINITY) return "";
	if(s3 == Number.NEGATIVE_INFINITY || s2 == Number.NEGATIVE_INFINITY) return "";

	return s1.substr(s2, s3);
}

function _substring(p1, p2, p3)
{
	var s1 = String(p1);
	var s2 = getNumber(p2);
	var s3 = getNumber(p3);

	if(isNaN(s3) || isNaN(s2)) return "";
	if(s3 == Number.POSITIVE_INFINITY || s2 == Number.POSITIVE_INFINITY) return "";
	if(s3 == Number.NEGATIVE_INFINITY || s2 == Number.NEGATIVE_INFINITY) return "";

	return s1.substring(s2, s3);
}

function _to_lowercase(p1)
{
	var s1 = String(p1);

	return s1.toLowerCase();
}

function _to_uppercase(p1)
{
	var s1 = String(p1);

	return s1.toUpperCase();
}

function _to_number(p1)
{
	return getNumber(p1);
}

function _length(p1)
{
	var s1 = String(p1);
	
	return s1.length;
}

function _replace(p1, p2, p3)
{
	var s1 = String(p1);
	var s2 = String(p2);
	var s3 = String(p3);
	
	var regExp = new RegExp(s2, "g");
	return s1.replace(regExp, s3);
}

function _if(p1, p2, p3)
{
	var s1 = Boolean(p1);

	if(s1) return p2;
	return p3;
}

function __or(p1, p2)	
{
	return p1 || p2;
}

function __andWithStr(p1, p2)
{
	return p1 && p2;
}

function __equals(p1, p2)
{
	if (p1 == "" && p2 == 0 && typeof(p1) == "string" && typeof(p2) == "number") return false;
	if (p2 == "" && p1 == 0 && typeof(p2) == "string" && typeof(p1) == "number") return false;
	return p1 == p2;
}

function __greaterOrEquals(p1, p2)
{
	return p1 >= p2;
}

function __lessOrEquals(p1, p2)
{
	return p1 <= p2;
}

function __greater(p1, p2)
{
	return p1 > p2;
}

function __less(p1, p2)
{
	return p1 < p2;
}

function __notequals(p1, p2)
{
	return !__equals(p1, p2);
}

function __not(p1)
{
	return !p1;
}

function _format_date(dateStr, pattern)
{
	var date = getDate(dateStr);
	return formatDate(date, pattern);
}

function _format_date_by_type(dateStr, type)
{
	type = getNumber(type);
	
	var pattern;
	switch (type)
	{
		case 0:
			pattern = cldr["calendar_gregorian"]["dateFormats"]["short"];
			break;
		case 1:
			pattern = cldr["calendar_gregorian"]["dateFormats"]["medium"];
			break;
		case 2:
			pattern = cldr["calendar_gregorian"]["dateFormats"]["long"];
			break;
		case 3:
			pattern = cldr["calendar_gregorian"]["dateFormats"]["full"];
			break;
		default:
			pattern = cldr["calendar_gregorian"]["dateFormats"]["medium"];
			break;
	}
	
	var date = getDate(dateStr);
	return formatDate(date, pattern);
}

function _date(p1, p2, p3)
{
	var s1 = getNumber(p1);
	var s2 = getNumber(p2);
	var s3 = getNumber(p3);

	return formatMediumDate(new Date(s1, s2 - 1, s3));
}

function _today()
{
	return formatMediumDate(new Date());
}

function _date2days(dateStr)
{
	var date = getDate(dateStr);
	var time = date.getTime();
	time -= date.getTimezoneOffset() * 60 * 1000;
	return time / (24 * 3600 * 1000);
}

function _days2date(days)
{
	var n = getNumber(days);
	var date = new Date();
	date.setTime(n * 3600 * 24 * 1000);
	return formatMediumDate(date);
}

function _weekday(dateStr)
{
	var date = getDate(dateStr);
	return date.getDay();
}

function _day(dateStr)
{
	var date = getDate(dateStr);
	return date.getDate();
}

function _month(dateStr)
{
	var date = getDate(dateStr);
	return date.getMonth()+1;
}

function _year(dateStr)
{
	var date = getDate(dateStr);
	return date.getFullYear();
}

function _is_leap_year(year)
{
	var n = getNumber(year);
	if (n % 400 == 0) return true;
	else if (n % 100 == 0) return false;
	else if (n % 4 == 0) return true;
	else return false;
}

function _format_time(dateStr, pattern)
{
	var date = getTime(dateStr);
	return formatDate(date, pattern);
}

function _format_time_by_type(dateStr, type)
{
	type = getNumber(type);
	var pattern;
	switch (type)
	{
		case 0:
			pattern = cldr["calendar_gregorian"]["timeFormats"]["short"];
			break
		case 1:
			pattern = cldr["calendar_gregorian"]["timeFormats"]["medium"];
			break;
		default:
			pattern = cldr["calendar_gregorian"]["timeFormats"]["medium"];
			break;
	}
	
	var date = getTime(dateStr);
	return formatDate(date, pattern);
}

function _time(hour, minute, second)
{
	return formatMediumTime(new Date(2000, 0, 1, hour, minute, second));
}

function _time2seconds(timeStr)
{
	var t = getTime(timeStr);
	return (t.getHours() * 60 * 60) + (t.getMinutes() * 60) + t.getSeconds();
}

function _seconds2time(seconds)
{
	seconds = getNumber(seconds);
	var hour = Math.floor(seconds / (60 * 60));
	var minute = Math.floor((seconds - (hour * 60 * 60)) / 60);
	var second = seconds - (hour * 60 * 60) - (minute * 60);
	hour = hour % 24;
	return _time(hour, minute, second);
}

function _now()
{
	var date = new Date();
	var hour = date.getHours();
	var minute = date.getMinutes();
	var second = date.getSeconds();

	return _time(hour, minute, second);
}

function _hour(timeStr)
{
	var t = getTime(timeStr);

	return t.getHours();
}

function _minute(timeStr)
{
	var t = getTime(timeStr);

	return t.getMinutes();
}

function _second(timeStr)
{
	var t = getTime(timeStr);

	return t.getSeconds();
}

function _open_date()
{
	return formatMediumDate(openTime);
}

function _open_time()
{
	return formatMediumTime(openTime);
}

function _submit_date()
{
	var submitTime = parseSubmitTime();
	if (submitTime != undefined)
		return formatMediumDate(submitTime);
	else
		return "";
}

function _submit_time()
{
	var submitTime = parseSubmitTime();
	if (submitTime != undefined)
		return formatMediumTime(submitTime);
	else
		return "";
}

function _reference_id()
{
	var refId = getReferenceId();
	if (refId != undefined) return refId;
	else return "";
}

function parseSubmitTime()
{
	var submitTimeValue = formProperties["submitTime"];
	if (submitTimeValue == undefined) return undefined;
	
	var splittedArr = submitTimeValue.split(" ");
	if (splittedArr.length != 2) return undefined;
	var dateParts = splittedArr[0];
	var timeParts = splittedArr[1];
	
	var datePart = dateParts.split("-");
	var timePart = timeParts.split(":");
	if (datePart.length != 3 || timePart.length != 3) return undefined;
	return new Date(datePart[0], datePart[1]-1, datePart[2], timePart[0], timePart[1], timePart[2]);
}

function getReferenceId()
{
	return formProperties["referenceId"];
}
javascript_obj0022_014.js pdf-javascript-stream PDF /JS object 22 at offset 0x1538A 14156 bytes
SHA-256: 171aac8e2208b35087228e919d8c6b105689701aebd7f411e407cdb6ab3fbd35
Preview script
First 1,000 lines of the extracted script
function GregorianCalendar(year, month, day)
{
	this.set(year, month, day);
}

GregorianCalendar.prototype.gregorianCutover = -12219292800000;
GregorianCalendar.prototype.fields = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
GregorianCalendar.prototype.isSet = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
GregorianCalendar.prototype.isTimeSet = false;
GregorianCalendar.prototype.areFieldsSet = false;
GregorianCalendar.prototype.isLenient = true;
GregorianCalendar.prototype.time = 0;

function _set(year, month, date)
{
	this.isTimeSet = false;
	this.fields[1] = year;
	this.fields[2] = month;
	this.fields[5] = date;
	this.isSet[1] = true;
	this.isSet[2] = true;;
	this.isSet[5] = true;
	this.isSet[3] = false;
	this.isSet[6] = false;
	this.isSet[4] = false;
	this.isSet[7] = false;
	this.isSet[8] = false;
	this.isSet[0] = false;
}
GregorianCalendar.prototype.set = _set;

function _complete()
{
	if(!this.isTimeSet) this.computeTime();
	if(!this.areFieldsSet) this.computeFields();
}
GregorianCalendar.prototype.complete = _complete;

function _get(field)
{
	if(!this.isSet[field]) this.areFieldsSet = false;
	this.complete();
	return this.fields[field];
}
GregorianCalendar.prototype.get = _get;

function _setGregorianChange(date)
{
	this.gregorianCutover = date.getTime();
}
GregorianCalendar.prototype.setGregorianChange = _setGregorianChange;

function _getGregorianChange()
{
	return new Date(this.gregorianCutover);
}
GregorianCalendar.prototype.getGregorianChange = _getGregorianChange;

function _isLeapYear(year)
{
	if((year & 3) != 0) return false;
	if(!_isGregorian(year, 59)) return true;
	return ((year % 100) != 0 || (year % 400) == 0);
}
GregorianCalendar.prototype.isLeapYear = _isLeapYear;

function _getWeekDay(year, dayOfYear)
{
	var greg = _isGregorian(year, dayOfYear);
	var day = (this.getLinearDay(year, dayOfYear, greg)) | 0;
	var weekday = ((day + 5) % 7) | 0;
	if(weekday <= 0) weekday += 7;
	return weekday;
}
GregorianCalendar.prototype.getWeekDay = _getWeekDay;

function _getFirstDayOfMonth(year, month)
{
	var dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];

	if(month > 11)
	{
		year += (month / 12) | 0;
		month = (month % 12) | 0;
	}

	if(month < 0)
	{
		year += (month / 12) | 0;
		month = (month % 12) | 0;
		
		if(month < 0)
		{
			month += 12;
			year--;
		}
	}

	var dayOfYear = dayCount[month] + 1;
	if(month > 1) if(this.isLeapYear(year)) dayOfYear++;
	var greg = this.isGregorian(year, dayOfYear);
	var day = (this.getLinearDay(year, dayOfYear, greg)) | 0;
	var weekday = ((day + 5) % 7) | 0;
	if(weekday <= 0) weekday += 7;
	return weekday;
}
GregorianCalendar.prototype.getFirstDayOfMonth = _getFirstDayOfMonth;

function _isGregorian(year, dayOfYear)
{
	var relativeDay = (year - 1) * 365 + ((year - 1) >> 2) + dayOfYear - 719162;
	var gregFactor = Math.floor((year - 1) / 400.0) - Math.floor((year - 1) / 100.0);
	return ((relativeDay + gregFactor) * 60 * 60 * 24 * 1000 >= GregorianCalendar.prototype.gregorianCutover);
}
GregorianCalendar.prototype.isGregorian = _isGregorian;

function _nonLeniencyCheck()
{
	var month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var year = this.fields[1];
	var month = this.fields[2];
	var leap = this.isLeapYear(year) ? 1 : 0;

	if(this.isSet[0] && this.fields[0] != 1 && this.fields[0] != 0) throw "Illegal ERA.";
	if(this.isSet[1] && this.fields[1] < 1) throw "Illegal YEAR.";
	if(this.isSet[2] && (month < 0 || month > 11)) throw "Illegal MONTH.";
	
	if(this.isSet[3])
	{
		var daysInYear = 365 + leap;
		daysInYear += (this.getFirstDayOfMonth(year, 0) - 1);
		var last = this.getFirstDayOfMonth(year, 11) + 4;
		if(last > 7) last -= 7;
		daysInYear += 7 - last;
		var weeks = daysInYear / 7;
		if (this.fields[3] < 1 || this.fields[3] > weeks) throw "Illegal WEEK_OF_YEAR.";
	}

	if(this.isSet[4])
	{
		var weeks = (month == 1 && leap == 0) ? 4 : 5;
		if (this.fields[4] < 1 || this.fields[4] > weeks) throw "Illegal WEEK_OF_MONTH.";
	}

	if(this.isSet[5]) if(this.fields[5] < 1 || this.fields[5] > month_days[month] + ((month == 1) ? leap : 0)) throw "Illegal DAY_OF_MONTH.";
	if(this.isSet[6] && (this.fields[6] < 1 || this.fields[6] > 365 + leap)) throw "Illegal DAY_OF_YEAR.";
	if(this.isSet[7] && (this.fields[7] < 1 || this.fields[7] > 7)) throw "Illegal DAY_OF_WEEK.";

	if(this.isSet[8])
	{
		var weeks = (month == 1 && leap == 0) ? 4 : 5;
		if(this.fields[8] < -weeks || this.fields[8] > weeks) throw "Illegal DAY_OF_WEEK_IN_MONTH.";
	}

	if(this.isSet[9] && this.fields[9] != 0 && this.fields[9] != 1) throw "Illegal AM_PM.";
	if(this.isSet[10] && (this.fields[10] < 0 || this.fields[10] > 11)) throw "Illegal HOUR.";
	if(this.isSet[11] && (this.fields[11] < 0 || this.fields[11] > 23)) throw "Illegal HOUR_OF_DAY.";
	if(this.isSet[12] && (this.fields[12] < 0 || this.fields[12] > 59)) throw "Illegal MINUTE.";
	if(this.isSet[13] && (this.fields[13] < 0 || this.fields[13] > 59)) throw "Illegal SECOND.";
	if(this.isSet[14] && (this.fields[14] < 0 || this.fields[14] > 999)) throw "Illegal MILLISECOND.";
	if(this.isSet[15] && (this.fields[15] < -43200000 || this.fields[15] > 43200000)) throw "Illegal ZONE_OFFSET.";
	if(this.isSet[16] && (this.fields[16] < -43200000 || this.fields[16] > 43200000)) throw "Illegal DST_OFFSET.";
}
GregorianCalendar.prototype.nonLeniencyCheck = _nonLeniencyCheck;

function _computeTime()
{
	var millisInDay = 0; 
	var era = this.fields[0];
	var year = this.fields[1];
	var month = this.fields[2];
	var day = this.fields[5];

	var minute = this.fields[12];
	var second = this.fields[13];
	var millis = this.fields[14];
	var month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
	var hour = 0;

	if(!this.isLenient) this.nonLeniencyCheck();

	if(!this.isSet[2] && (!this.isSet[7] || this.isSet[3]))
	{
		// 5: YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
		if(this.isSet[3])
		{
			var first = this.getFirstDayOfMonth(year, 0);
			var offs = 1;
			var daysInFirstWeek = this.getFirstDayOfWeek() - first;
			if(daysInFirstWeek <= 0) daysInFirstWeek += 7;
	
			if (daysInFirstWeek < this.getMinimalDaysInFirstWeek()) offs += daysInFirstWeek;
		  else offs -= 7 - daysInFirstWeek;
		    
			month = 0;
			day = offs + 7 * (this.fields[3] - 1);
			offs = this.fields[7] - this.getFirstDayOfWeek();
	
			if(offs < 0) offs += 7;
			day += offs;
		}
		else
		{
			// 4:  YEAR + DAY_OF_YEAR
			month = 0;
			day = this.fields[6];
		}
	}
	else
	{
		if(this.isSet[7])
		{
			var first = this.getFirstDayOfMonth(year, month);

			// 3: YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
			if (this.isSet[8])
			{
				if(this.fields[8] < 0)
				{
					month++;
					first = this.getFirstDayOfMonth(year, month);
					day = 1 + 7 * (this.fields[8]);
				}
				else day = 1 + 7 * (this.fields[8] - 1);

				var offs = this.fields[7] - first;
				if(offs < 0) offs += 7;
				day += offs;
			}
			else
			{ // 2: YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
				var offs = 1;
				var daysInFirstWeek = this.getFirstDayOfWeek() - first;
				if(daysInFirstWeek <= 0) daysInFirstWeek += 7;

				if(daysInFirstWeek < this.getMinimalDaysInFirstWeek()) offs += daysInFirstWeek;
				else offs -= 7 - daysInFirstWeek;

				day = offs + 7 * (this.fields[4] - 1);
				offs = this.fields[7] - this.getFirstDayOfWeek();
				if(offs <= 0) offs += 7;
				day += offs;
			}
		}

		// 1:  YEAR + MONTH + DAY_OF_MONTH
	}
	if(era == 0 && year > 0) year = 1 - year;

    // rest of code assumes day/month/year set
    // should negative BC years be AD?
    // get the hour (but no check for validity)
	if(this.isSet[10])
	{
		hour = this.fields[10];
		if(this.fields[9] == 1) hour += 12;
	}
	else hour = this.fields[11];

    // Read the era,year,month,day fields and convert as appropriate.
    // Calculate number of milliseconds into the day
    // This takes care of both h, m, s, ms over/underflows.
	var allMillis = (((hour * 60) + minute) * 60 + second) * 1000 + millis;
	day += (allMillis / (24 * 60 * 60 * 1000)) | 0;
	millisInDay = ((allMillis % (24 * 60 * 60 * 1000))) | 0;

	if(month < 0)
	{
		year += (month / 12) | 0;
		month = (month % 12) | 0;
		if(month < 0)
	  {
			month += 12;
			year--;
		}
	}
	if(month > 11)
	{
		year += (month / 12) | 0;
		month = (month % 12) | 0;
	}

	month_days[1] = this.isLeapYear(year) ? 29 : 28;

	while(day <= 0)
	{
		if(month == 0)
		{
			year--;
			month_days[1] = this.isLeapYear(year) ? 29 : 28;
		}
		month = ((month + 11) % 12) | 0;
		day += month_days[month];
	}
	while(day > month_days[month])
	{
		day -= (month_days[month]);
		month = ((month + 1) % 12) | 0;
		if(month == 0)
		{
			year++;
			month_days[1] = this.isLeapYear(year) ? 29 : 28;
		}
	}

    // ok, by here we have valid day,month,year,era and millisinday
	var dayOfYear = dayCount[month] + day - 1; // (day starts on 1)
	if(this.isLeapYear(year) && month > 1) dayOfYear++;

	var relativeDay = (year - 1) * 365 + ((year - 1) >> 2) + dayOfYear - 719162;
	var gregFactor = Math.floor((year - 1) / 400.0) - Math.floor((year - 1) / 100.0);

	if((relativeDay + gregFactor) * 60 * 60 * 24 * 1000 >= this.gregorianCutover) relativeDay += gregFactor;
	else relativeDay -= 2;

	this.time = relativeDay * (24 * 60 * 60 * 1000) + millisInDay;

    // the epoch was a Thursday.
	var weekday = ((relativeDay + 5) % 7) | 0;
	if (weekday <= 0) weekday += 7;
	this.fields[7] = weekday;

    // Time zone corrections.
	//var zone = getTimeZone();
	//var rawOffset = this.isSet[15] ? this.fields[15] : zone.getRawOffset();

	//var dstOffset = this.isSet[16] ? this.fields[16] : (zone.getOffset((year < 0) ? 0 : 1, (year < 0) ? 1 - year : year, month, day, weekday, millisInDay) - zone.getRawOffset());

	//time -= rawOffset + dstOffset;

	this.isTimeSet = true;
}
GregorianCalendar.prototype.computeTime = _computeTime;

function _getLinearDay(year, dayOfYear, gregorian)
{    
	var julianDay = (year - 1) * 365 + ((year - 1) >> 2) + (dayOfYear - 1) - 719162;

	if(gregorian)
	{
		var gregOffset = Math.floor((year - 1) / 400.0) - Math.floor((year - 1) / 100.0);
		return julianDay + gregOffset;
	}
	else julianDay -= 2;
	return julianDay;
}
GregorianCalendar.prototype.getLinearDay = _getLinearDay;

function _calculateDay(fields, day, gregorian)
{
	var weekday = ((day + 5) % 7) | 0;
	if(weekday <= 0) weekday += 7;
	fields[7] = weekday;

    // get a first approximation of the year.  This may be one
    // year too big.
	var year = 1970 + (gregorian ? (((day - 100) * 400) / (365 * 400 + 100 - 4 + 1)) | 0 : (((day - 100) * 4) / (365 * 4 + 1)) | 0);
	if(day >= 0) year++;

	var firstDayOfYear = _getLinearDay(year, 1, gregorian);

    // Now look in which year day really lies.
	if(day < firstDayOfYear)
	{
		year--;
		firstDayOfYear = _getLinearDay(year, 1, gregorian);
	}

	day -= firstDayOfYear - 1; // day of year,  one based.

	fields[6] = (day) | 0;
	if(year <= 0)
	{
		fields[0] = 0;
		fields[1] = 1 - year;
	}
	else
	{
		fields[0] = 1;
		fields[1] = year;
	}

	var leapday = _isLeapYear(year) ? 1 : 0;
	if(day <= 31 + 28 + leapday)
	{
		fields[2] = (day / 32) | 0; // 31->JANUARY, 32->FEBRUARY
		fields[5] = (day - 31 * fields[2]) | 0;
	}
	else
	{
		// A few more magic formulas
		var scaledDay = (((day - leapday) | 0) * 5 + 8) | 0;
		fields[2] = (scaledDay / (31 + 30 + 31 + 30 + 31)) | 0;
		fields[5] = ((scaledDay % (31 + 30 + 31 + 30 + 31)) / 5 + 1) | 0;
	}
}
GregorianCalendar.prototype.calculateDay = _calculateDay;

function _computeFields()
{
	var gregorian = (this.time >= this.gregorianCutover);

	//var zone = getTimeZone();
	this.fields[15] = 0; //zone.getRawOffset();
	var localTime = this.time + this.fields[15];

	var day = (localTime / (24 * 60 * 60 * 1000)) | 0;
	var millisInDay = (localTime % (24 * 60 * 60 * 1000)) | 0;

	if(millisInDay < 0)
	{
		millisInDay += (24 * 60 * 60 * 1000);
		day--;
	}

	this.calculateDay(this.fields, day, gregorian);
	this.fields[16] = 0; //zone.getOffset(this.fields[0], this.fields[1], this.fields[2], this.fields[5], this.fields[7], millisInDay) - this.fields[15];

	millisInDay += this.fields[16];
	if(millisInDay >= 24 * 60 * 60 * 1000)
	{
		millisInDay -= 24 * 60 * 60 * 1000;
		this.calculateDay(this.fields, ++day, gregorian);
 	}

	this.fields[8] = ((this.fields[5] + 6) / 7) | 0;

    // which day of the week are we (0..6), relative to getFirstDayOfWeek
	var relativeWeekday = ((7 + this.fields[7] - this.getFirstDayOfWeek()) % 7) | 0;

	this.fields[4] = ((this.fields[5] - relativeWeekday + 12) / 7) | 0;

	var weekOfYear = ((this.fields[6] - relativeWeekday + 6) / 7) | 0;

    // Do the Correction: getMinimalDaysInFirstWeek() is always in the
    // first week.
	var minDays = this.getMinimalDaysInFirstWeek();
	var firstWeekday = ((7 + this.getWeekDay(this.fields[1], minDays)
                       - this.getFirstDayOfWeek()) % 7) | 0;
	if(minDays - firstWeekday < 1) weekOfYear++;
	this.fields[3] = weekOfYear;

	var hourOfDay = (millisInDay / (60 * 60 * 1000)) | 0;
	this.fields[9] = (hourOfDay < 12) ? 0 : 1;
	var hour = (hourOfDay % 12) | 0;
	this.fields[10] = hour;
	this.fields[11] = hourOfDay;
	millisInDay = (millisInDay % (60 * 60 * 1000)) | 0;
	this.fields[12] = millisInDay / (60 * 1000);
	millisInDay = (millisInDay % (60 * 1000)) | 0;
	this.fields[13] = (millisInDay / (1000)) | 0;
	this.fields[14] = (millisInDay % 1000) | 0;

	this.areFieldsSet = true;
	this.isSet[0] = true;
	this.isSet[1] = true;
	this.isSet[2] = true;
	this.isSet[3] = true;
	this.isSet[4] = true;
	this.isSet[5] = true;
	this.isSet[6] = true;
	this.isSet[7] = true;
	this.isSet[8] = true;
	this.isSet[9] = true;
	this.isSet[10] = true;
	this.isSet[11] = true;
	this.isSet[12] = true;
	this.isSet[13] = true;
	this.isSet[14] = true;
	this.isSet[15] = true;
	this.isSet[16] = true;
}
GregorianCalendar.prototype.computeFields = _computeFields;

function _getFirstDayOfWeek()
{
	return 2;
}
GregorianCalendar.prototype.getFirstDayOfWeek = _getFirstDayOfWeek;

function _getMinimalDaysInFirstWeek()
{
	return 4;
}
GregorianCalendar.prototype.getMinimalDaysInFirstWeek = _getMinimalDaysInFirstWeek;
javascript_obj0024_015.js pdf-javascript-stream PDF /JS object 24 at offset 0x16151 24495 bytes
SHA-256: 357ea0785b09f7df52440b553e24163e28a33a0338f6e8362055f93fb7167ae6
Preview script
First 1,000 lines of the extracted script
String.prototype.leftTrim = function () {
	return (this.replace(/^\s+/,""));
};
String.prototype.rightTrim = function () {
	return (this.replace(/\s+$/,""));
};
//kombiniert "leftTrim" und "rightTrim";
String.prototype.trim = function () {
	return (this.replace(/\s+$/,"").replace(/^\s+/,""));
};
  
// help function for language plural rules, number has to be an integer for that the function returns true
function isIn(number, a, b)
{
	return isWith(number, a, b) && isInteger(number);
}

// help function for language plural rules, all numbers accepted
function isWith(number, a, b)
{
	return number >= a && number <= b;
}

function isInteger(number)
{
	return number % 1 == 0;
}

function getPaddingStr(toPad, numPadding)
{
    if (numPadding <= 0)
        return "";

    var paddingStr = "";

    for (var i = 0; i < numPadding; i ++)
    {
        paddingStr += toPad;
    }
    
    return paddingStr;
}

function padAfter(str, toPad, numPadding)
{
    return str.concat(getPaddingStr(toPad, numPadding));
}

function padBefore(str, toPad, numPadding)
{
    return getPaddingStr(toPad, numPadding).concat(str);
}

/*
formatCurrency

formats a number to a string

params:
    number: the number
          
    pattern: http://www.unicode.org/reports/tr35/tr35-11.html#Number_Format_Patterns
    
    overrideAfterDecimal: (optional) overrides the count of fractional beeing shown

returns:
	the formatted number string
*/

function formatNumber(number, pattern, overrideAfterDecimal)
{
	var parts = splitDateParts(pattern);
	var negativeSubpatternPos = -1;
	for (var i = 0; i < parts.length; i ++)
	{
		if (parts[i].isPattern)
		{
			var index = parts[i].content.indexOf(";")
			if (index != -1)
			{
				var before = parts[i].content.substr(0, index);
				var after = parts[i].content.substr(index+1);
				parts.splice(i, 1, { isPattern: true, content: before}, { isPattern: true, content: after});
				negativeSubpatternPos = i + 1;
				break;
			}
		}
	}
	
	if (negativeSubpatternPos != -1)
	{
		if (number < 0)
		{
			number = -number;
			parts.splice(0, negativeSubpatternPos);
		}
		else
		{
			parts.splice(negativeSubpatternPos, parts.length - negativeSubpatternPos);
		}
	}
	
	var totalStr = "";
	for (var i = 0; i < parts.length; i ++)
	{	
		if (parts[i].isPattern)
		{
			parts[i].content = replaceMinus(parts[i].content)
			if (parts[i].content.indexOf(".") != -1 || parts[i].content.indexOf("0") != -1)
			{
				totalStr += formatNumberIntern(number, parts[i].content, overrideAfterDecimal);
			}
			else
			{
				totalStr += parts[i].content;
			}
		}
		else
		{
			totalStr += parts[i].content;
		}
	}

	return totalStr;
}

function formatNumberIntern(number, pattern, overrideAfterDecimal)
{
    // pattern parsing
    var decimalPointPos = pattern.indexOf(".");
    var hasDecimalPoint = true;
    if (decimalPointPos == -1)
    {
        decimalPointPos = pattern.lastIndexOf("0")+1;
        if (decimalPointPos == -1)
			return n.toString();
        hasDecimalPoint = false;
    }

    var beforeDecimal = "";
    var afterDecimal = "";
    var inNumber = true;
    var i = decimalPointPos - 1;
    var decimalStart = 0;
    var decimalEnd = pattern.length;
    while (inNumber && i >= 0)
    {
        var ch = pattern.charAt(i);
        if (ch != '#' && ch != '0' && ch != ',')
        {
            inNumber = false;
            decimalStart = i+1;
            break;
        }
        beforeDecimal = ch + beforeDecimal;
        i--;
    }
    inNumber = true;
    i = decimalPointPos + 1;
    if (hasDecimalPoint)
    {
        while (inNumber && i < pattern.length)
        {
            var ch = pattern.charAt(i);
            if (ch != '#' && ch != '0')
            {
                inNumber = false;
                decimalEnd = i;
                break;
            }
            afterDecimal += ch;
            i++;
        }
    }
    else
    {
        decimalEnd = decimalPointPos;
        afterDecimal = "";
    }
    var minIntegerLength = 0;
    for (var i = 0; i < beforeDecimal.length; i ++)
    {
        if (beforeDecimal.charAt(i) == '0')
            minIntegerLength ++;
    }
    var firstGroupingLength = 0;
    var secondGroupingLength = 0;
    var first = true;
    var currCounter = 0;
    for (var i = beforeDecimal.length-1; i >= 0; i --)
    {
        if (beforeDecimal.charAt(i) == ',')
        {
            if (first)
            {
                firstGroupingLength = currCounter;
                first = false;
            }
            else
            {
                secondGroupingLength = currCounter - firstGroupingLength;
                break;
            }
        }
        else
            currCounter ++;
    }
    var minFractionalLength = 0;
    var maxFractionalLength = 0;
    for (var i = 0; i < afterDecimal.length; i ++)
    {
        if (afterDecimal.charAt(i) == '0')
            minFractionalLength ++;
        else if (afterDecimal.charAt(i) == '#')
            maxFractionalLength ++;
    }
    
    maxFractionalLength = maxFractionalLength + minFractionalLength;

	if (overrideAfterDecimal != null)
		minFractionalLength = maxFractionalLength = overrideAfterDecimal;
		
	// formatting
    var output = "";
    output += pattern.substr(0, decimalStart);
    var outputAfterNumber = pattern.substr(decimalEnd);

    var outputBeforeDecimal = "";
    var numberBeforeDecimal = number.toFixed(maxFractionalLength)*1;
    var doGroup = true;
    
	// handle NaN
	if (number == NaN)
	{
		doGroup = false;
		numberBeforeDecimal = cldr.numbers_symbols.nan;
	}
	else if (number == Number.POSITIVE_INFINITY || number == Number.NEGATIVE_INFINITY)
	{
		doGroup = false;
		numberBeforeDecimal = cldr.numbers_symbols.infinity;
	}
	
    var negative = false;
    if (numberBeforeDecimal < 0)
    {
        numberBeforeDecimal = -numberBeforeDecimal;
        negative = true;
    }
	
    outputBeforeDecimal = numberBeforeDecimal.toString();
    var dotIndexBefore = outputBeforeDecimal.indexOf(".");
    if (dotIndexBefore != -1)
		outputBeforeDecimal = outputBeforeDecimal.substr(0, dotIndexBefore);
	
    outputBeforeDecimal = padBefore(outputBeforeDecimal, "0", minIntegerLength - outputBeforeDecimal.length);
    if (firstGroupingLength != 0 && doGroup)
    {
        if (secondGroupingLength != 0)
        {
            var added = 0;
            var groupingLength = firstGroupingLength;
            for (var i = 0; i < outputBeforeDecimal.length; i ++)
            {
                if ((i - added) % groupingLength == 0 && i != 0)
                {
                    outputBeforeDecimal = stringInsert(outputBeforeDecimal, cldr.numbers_symbols.group, outputBeforeDecimal.length - i);
                    i ++;
                    added ++;
                    groupingLength = secondGroupingLength;
                }
            } 
        }
        else
        {
            var added = 0;
            for (var i = 0; i < outputBeforeDecimal.length; i ++)
            {
                if ((i - added) % firstGroupingLength == 0 && i != 0)
                {
                    outputBeforeDecimal = stringInsert(outputBeforeDecimal, cldr.numbers_symbols.group, outputBeforeDecimal.length - i);
                    i ++;
                    added ++;
                }
            }
        }
    }
    if (negative)
        outputBeforeDecimal = cldr.numbers_symbols.minusSign.concat(outputBeforeDecimal);

    var outputAfterDecimal = "";
    if ((hasDecimalPoint && number.toString().indexOf(".") != -1) || (minFractionalLength > 0 && number != Number.NaN && number != Number.POSITIVE_INFINITY && number != Number.NEGATIVE_INFINITY))
    {
        outputAfterDecimal += cldr.numbers_symbols.decimal;
        var fractional = numberBeforeDecimal.toString();
        var dotIndex = fractional.indexOf(".");
        if (dotIndex == -1)
			fractional = "";
        else
			fractional = fractional.substr(dotIndex + 1);
        
        var nullIndex = -1;
        do
        {
			if (nullIndex != -1)
				fractional = stringRemove(fractional, nullIndex);
			
			nullIndex = fractional.indexOf("0");
			if (nullIndex != -1)
			{
				var doRemove = true;
				for (var i = fractional.length-1; i > nullIndex; i --)
				{
					if (fractional.charAt(i) != "0")
						doRemove = false;
				}
				
				if (!doRemove)
					nullIndex = -1;
			}
        }
        while (nullIndex != -1)
			
        var padding = padAfter(fractional, "0", minFractionalLength - fractional.length);
        fractional = padding;
        if (fractional == "")
			outputAfterDecimal = "";
		else
			outputAfterDecimal += fractional;
    }

    output = removeQuotes(output);
    outputAfterNumber = removeQuotes(outputAfterNumber);

    return output.concat(outputBeforeDecimal).concat(outputAfterDecimal).concat(outputAfterNumber);
}

function stringInsert(str, toInsert, pos)
{
    return str.substr(0, pos).concat(toInsert).concat(str.substr(pos));
}

function stringRemove(str, pos)
{
	return str.substr(0, pos).concat(str.substr(pos+1));
}

function replaceMinus(str)
{
    var splitted = str.split("-");
    if (splitted.length == 0) return str;
    if (splitted.length == 1) return str;

    var totalStr = "";
    for (var i = 0; i < splitted.length; i ++)
    {
        if (i == 0)
            totalStr = totalStr.concat(splitted[i]);
        else
            totalStr = totalStr.concat(cldr.numbers_symbols.minusSign).concat(splitted[i]);
    }

    return totalStr;
}

function removeQuotes(str)
{
    var arr = str.split("'");
    if (arr.length == 0)
        return str;
    var beforeDoubleQuoted = false;
    var totalStr = "";
    for (var i = 0; i < arr.length; i ++)
    {
        // if double quoted, the result is a quote
        if (arr[i] == "" && !beforeDoubleQuoted && i != arr.length -1)
        {
            arr[i] = "'";
            beforeDoubleQuoted = true;
        }
        else
            beforeDoubleQuoted = false;

        totalStr = totalStr.concat(arr[i]);
    }

    return totalStr;
}

var parsingInitialized = false;
var regExpDots = null;
var regExpDotsReplace = "$2$4$5$7$8$10$11$12$14$15$16$17";
var spaceClass = /\s/;
var spaceDotClass = null;
var wordClass = /[\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u01ba\u01bc-\u01bf\u01c4\u01c6\u01c7\u01c9\u01ca\u01cc-\u01f1\u01f3-\u021f\u0222-\u0233\u0250-\u02ad\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03ce\u03d0-\u03d7\u03da-\u03f3\u0400-\u0481\u048c-\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0-\u04f5\u04f8\u04f9\u0531-\u0556\u0561-\u0587\u10a0-\u10c5\u1e00-\u1e9b\u1ea0-\u1ef9\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6-\u1fbb\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcb\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffb\u207f\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2131\u2133\u2134\u2139\ufb00-\ufb06\ufb13-\ufb17\uff21-\uff3a\uff41-\uff5a]/;
var numberClass = null;
var numberClassDate = null;
var minusClass = /[-\u2212]/;
var digitClass = /[\d\u221e]/;
var decimalClass = null;
var cachedCldr = new Array();
cachedCldr["currencies"] = new Array();
cachedCldr["calendar"] = new Array();
var currencySymbolClass = /[\u0024\u00a3\u00a5\u20b4\u0e3f]/;

cachedCldr["calendar"]["months_format"] = new Array();
cachedCldr["calendar"]["months_stand_alone"] = new Array();
cachedCldr["calendar"]["months_format"]["wide"]= new Array();
cachedCldr["calendar"]["months_format"]["abbreviated"]= new Array();
cachedCldr["calendar"]["months_format"]["narrow"]= new Array();
cachedCldr["calendar"]["months_stand_alone"]["wide"]= new Array();
cachedCldr["calendar"]["months_stand_alone"]["abbreviated"]= new Array();
cachedCldr["calendar"]["months_stand_alone"]["narrow"]= new Array();

cachedCldr["calendar"]["days_format"] = new Array();
cachedCldr["calendar"]["days_stand_alone"] = new Array();
cachedCldr["calendar"]["days_format"]["wide"]= new Array();
cachedCldr["calendar"]["days_format"]["abbreviated"]= new Array();
cachedCldr["calendar"]["days_format"]["narrow"]= new Array();
cachedCldr["calendar"]["days_stand_alone"]["wide"]= new Array();
cachedCldr["calendar"]["days_stand_alone"]["abbreviated"]= new Array();
cachedCldr["calendar"]["days_stand_alone"]["narrow"]= new Array();

cachedCldr["calendar"]["relative_days"] = new Array();
cachedCldr["calendar"]["months_all"] = new Array();
cachedCldr["calendar"]["months_all"]["_1"] = new Array();
cachedCldr["calendar"]["months_all"]["_2"] = new Array();
cachedCldr["calendar"]["months_all"]["_3"] = new Array();
cachedCldr["calendar"]["months_all"]["_4"] = new Array();
cachedCldr["calendar"]["months_all"]["_5"] = new Array();
cachedCldr["calendar"]["months_all"]["_6"] = new Array();
cachedCldr["calendar"]["months_all"]["_7"] = new Array();
cachedCldr["calendar"]["months_all"]["_8"] = new Array();
cachedCldr["calendar"]["months_all"]["_9"] = new Array();
cachedCldr["calendar"]["months_all"]["_10"] = new Array();
cachedCldr["calendar"]["months_all"]["_11"] = new Array();
cachedCldr["calendar"]["months_all"]["_12"] = new Array();
cachedCldr["calendar"]["days_all"] = new Array();
cachedCldr["calendar"]["days_all"]["sun"] = new Array();
cachedCldr["calendar"]["days_all"]["mon"] = new Array();
cachedCldr["calendar"]["days_all"]["tue"] = new Array();
cachedCldr["calendar"]["days_all"]["wed"] = new Array();
cachedCldr["calendar"]["days_all"]["thu"] = new Array();
cachedCldr["calendar"]["days_all"]["fri"] = new Array();
cachedCldr["calendar"]["days_all"]["sat"] = new Array();

for (var currencyName in cldr["numbers_currencies"])
{
	cachedCldr["currencies"][currencyName]= new Array();
	cachedCldr["currencies"][currencyName]["symbols"] = new Array();
}

function getCached(cacheObj, originalObj)
{
	if (cacheObj == null)
	{
		cacheObj = splitChoicePattern(originalObj);
		for (var i = 0; i < cacheObj.length; i ++)
		{
			cacheObj[i] = splitString(cacheObj[i], currencySymbolClass);
			for (var j = 0; j < cacheObj[i].length; j ++)
			{
				if (cacheObj[i][j].content == "")
					cacheObj[i][j] = null;
				else
				{
					var regExpFull = new RegExp(escapeRegexpString(cacheObj[i][j].content));
					var regExpPartly = buildPartlyRegexp(cacheObj[i][j].content);
					cacheObj[i][j] = { full : regExpFull, partly : regExpPartly };
				}
			}
		}
	}
	
	return cacheObj;
}

function buildPartlyRegexp(str)
{
	var regExpString = "";
	for (var i = 0; i < str.length; i ++)
	{
		regExpString += escapeRegexpString(str.substr(0, str.length - i));
		if (i != str.length - 1)
			regExpString += "|";
	}
	
	return new RegExp(regExpString);
}

function escapeRegexpString(str)
{
	str = str.replace(/\[/, "\\[");
	str = str.replace(/\\/, "\\\\");
	str = str.replace(/\^/, "\\^");
	str = str.replace(/\$/, "\\$");
	str = str.replace(/\./, "\\.");
	str = str.replace(/\|/, "\\|");
	str = str.replace(/\?/, "\\?");
	str = str.replace(/\*/, "\\*");
	str = str.replace(/\+/, "\\+");
	str = str.replace(/\(/, "\\(");
	str = str.replace(/\)/, "\\)");
	return str;
}

function splitChoicePattern(choicePattern)
{
	if (choicePattern == null)
		return new Array("");
		
	// look for a choice pattern
	if (choicePattern.indexOf("|") != -1)
	{
		var resultArray = new Array();
		var choices = choicePattern.split('|');
		
		// match from right to left
		for (var i = choices.length-1; i >= 0; i --)
		{
			var relationPos = choices[i].search(/[\u2264<]/);
			var resultString; 
			if (relationPos == -1) resultString = choices[i];
			else resultString = choices[i].substr(relationPos+1);
			
			resultArray.push(resultString);
		}
		
		return resultArray;
	}
	else
	{
		return new Array(choicePattern);
	}
}

function initializeParsing()
{
	if (parsingInitialized) return;
	
	// decimal set
	var decimalSetFull = new Array(",", ".");
	var decimalSet = new Array();
	
	// remove seperator from decimal set list
	for (var i = 0; i < decimalSetFull.length; i ++)
	{
		if (decimalSetFull[i] != cldr.numbers_symbols.group)
			decimalSet.push(decimalSetFull[i]);
	}
	
	
	// remove all dots except the decimal dot
	var decimalSetStr = "";
	for (var i = 0; i < decimalSet.length; i ++)
	{
		var charCode = decimalSet[i].charAt();
		decimalSetStr += charCode;
	}
	decimalClass = new RegExp("[" + decimalSetStr + "]");
	spaceDotClass = new RegExp("[" + decimalSetStr + "\\s]");
	
	var regExpString = "(([^\\d.])([" + decimalSetStr + "]+)([^\\d.])|([\\d])([" + decimalSetStr + "]+)([^\\d.])|([^.\\d])([" + decimalSetStr + "]+)([\\d])|(\\d)([" + decimalSetStr + "])([" + decimalSetStr + "]{1,})(\\d)|^(.)[" + decimalSetStr + "]+(\\d)|^[" + decimalSetStr + "]+(\\D)|[" + decimalSetStr + "]+$)";
	var regExp = new RegExp(regExpString, "g");
	regExpDots = regExp;
	
	// number class (digit, dot, sign)
	var minusSetStr = "-\u2212";
	
	numberClass = new RegExp("[" + minusSetStr + decimalSetStr + "\\d\u221e]");
	numberClassDate = new RegExp("[\\d]");
	parsingInitialized = true;
}

// repeates a replacement unless no more matches
function replaceRepeat(str, regExp, regExpReplace)
{
	var i = 0;
	while (str.match(regExp))
	{
		if (i >= 100) break;
		str = str.replace(regExpDots, regExpReplace);
		i ++;
	}
	
	return str;
}

/*
normalizeString

normalizes a string as specified in http://www.unicode.org/reports/tr35/tr35-11.html#Lenient_Parsing -> O.2 Loose Matching

params:
    str: string to normalize

returns:
	normalized string
*/
function normalizeString(str)
{
	initializeParsing();
	
	// remove control chars
	str = str.replace(/\n|\t|\0|\f|\r|\v/g, "");
	
	// remove dots
	//str = replaceRepeat(str, regExpDots, regExpDotsReplace);

	// case folding
	str = str.toLowerCase();
	
	// do mapping
	var resultString = "";
	for (var i = 0; i < str.length; i ++)
	{	
		var ch = str.charAt(i);
		var map = charMapping[ch];
		if (map != null)
			resultString += map;
		else
			resultString += ch
	}
	
	resultString = resultString.toLowerCase();
	
	return resultString;
}

function removeChar(str, pos)
{
	return str.substr(0, pos).concat(str.substr(pos+1));
}

function splitString(str, currencySymbolsClass, isDate)
{
	str = normalizeString(str);
	
	var resultArray = new Array();
	
	var myNumberClass = isDate ? numberClassDate : numberClass;
	
	// state
	// 0: none
	// 1: in number
	// 2: in word
	var state = 0;
	
	var currentPart;
	for (var i = 0; i < str.length; i ++)
	{
		var currentChar = str.charAt(i);
		var exiting = false;
		var exitPart;
		var exitState = state;
		
		switch (state)
		{
			case 0: // none
				if (currentChar.match(myNumberClass))
				{
					currentPart = "" + currentChar;
					state = 1;
				}
				else if (matchWord(currentChar, currencySymbolsClass))
				{
					currentPart = "" + currentChar;
					state = 2;
				}
				
				break;
			
			case 1: // number
				if (currentChar.match(myNumberClass))
				{
					currentPart += "" + currentChar;
				}
				else if (currentChar.match(spaceClass) && isDate == true)
				{
					exiting = true;
					exitPart = currentPart;
					state = 0;
				}
				else if (matchWord(currentChar, currencySymbolsClass))
				{
					exiting = true;
					exitPart = currentPart;
					currentPart = "" + currentChar;
					state = 2;
				}
				else
				{
					if (isDate)
					{
						exiting = true;
						exitPart = currentPart;
						state = 0;
					}
				}
				break;
				
			case 2: // word
				if (matchWord(currentChar, currencySymbolsClass))
				{
					currentPart += "" + currentChar;
				}
				else if (currentChar.match(spaceClass))
				{
					exiting = true;
					exitPart = currentPart;
					state = 0;
				}
				else if (currentChar.match(myNumberClass))
				{
					exiting = true;
					exitPart = currentPart;
					currentPart = "" + currentChar;
					state = 1;
				}
				else
				{
					if (isDate)
					{
						exiting = true;
						exitPart = currentPart;
						state = 0;
					}
				}
				break;
			
			default: break;
		}
		
		if (exiting)
		{
			addToArr(resultArray, exitState, exitPart);
		}
	}
	
	if (state != 0)
	{
		addToArr(resultArray, state, currentPart);
	}
	
	return resultArray;
}

function matchWord(ch, currencySymbolsClass)
{
	if (ch.match(wordClass)) return true;
	if (currencySymbolsClass != null)
		return ch.match(currencySymbolsClass);
}

function addToArr(arr, state, part)
{
	if (state == 1)
	{
		if (!part.match(digitClass)) return;
	}
	
	arr.push({ type : state, content : part });
}
/*
parseNumber

parses a number as specified in http://www.unicode.org/reports/tr35/tr35-11.html#Lenient_Parsing -> O.3 Parsing numbers

params:
    str: string to parse

returns:
	number
*/
function parseNumber(str)
{
	// convert always to string
	str = str + "";
	
	// split in all parts
	var parts = splitString(str, null, false);
	
	return toNumber(parts);
}

function toNumber(parts)
{
	// take the first number of all parts
	var numberStr = null;
	for (var i = 0; i < parts.length; i ++)
	{
		if (parts[i].type == 1)
		{
			numberStr = parts[i].content;
			break;
		}
	}
	
	if (numberStr == null)
	{
		return null;
	}
	
	if (numberStr.match(/[\u221e]/))
	{
		return Number.POSITIVE_INFINITY;
	}
	
	// determine if negative
	var negative = false;
	if (numberStr.match(minusClass))
		negative = true;
	
	// take the last decimal point
	var afterDecimal = "";
	var beforeDecimal = "";
	var isAfterDecimal = true;
	for (var i = numberStr.length-1; i >= 0; i --)
	{
		var currentChar = numberStr.charAt(i);
		
		// take the last decimal sign
		if (isAfterDecimal && afterDecimal != "")
			if (currentChar.match(decimalClass))
				isAfterDecimal = false;
		
		if (currentChar.match(digitClass))
		{
			if (isAfterDecimal)
				afterDecimal = currentChar + afterDecimal;
			else
				beforeDecimal = currentChar + beforeDecimal;
		}
	}
	
	var resultNumber;
	if (beforeDecimal == "" && isAfterDecimal == true)
		resultNumber = parseInt(afterDecimal, 10);
	else if (beforeDecimal == "" && isAfterDecimal == false)
		resultNumber = parseFloat("0." + afterDecimal, 10);
	else
		resultNumber = parseFloat(beforeDecimal + "." + afterDecimal, 10);
	
	return negative ? -resultNumber : resultNumber;
}

function matchWithNames(parts, currency, nameArr, matchFull, matchAllParts, doRemoveFoundParts, whereFound)
{
	for (var j = 0; j < nameArr.length; j ++)
	{
		if (matchArrOnParts(nameArr[j], parts, matchFull, matchAllParts, doRemoveFoundParts, whereFound))
		{
			return currency;
		}
	}
	
	return null;
}

function matchArrOnParts(arr, parts, matchFull, matchAllParts, doRemoveFoundParts, whereFound)
{
	if (doRemoveFoundParts == null)
		doRemoveFoundParts = false;
		
	var foundArr = new Array();
	var removeArr = new Array();
	for (var i = 0; i < arr.length; i ++)
	{
		var found = false;
		var regExp = matchFull ? arr[i].full : arr[i].partly;
		for (var j = 0; j < parts.length; j ++)
		{
			if (parts[j].type == 2)
			{
				if (regExp != null)
				{
					if (parts[j].content.match(regExp) == parts[j].content)
					{
						found = true;
						
						// remove found parts if necessary
						if (doRemoveFoundParts)
						{
							parts.splice(j, 1);
						}
						
						if (whereFound != null)
						{
							if (whereFound.value == -1)
							{
								whereFound.value = j;
							}
						}
						break;
					}
				}
			}
		}
		
		if (found)
			foundArr[i] = true;
		else
			foundArr[i] = false;
	}
	
	if (arr.length == 0) return false;
	
	if (matchAllParts)
	{
		for (var i = 0; i < foundArr.length; i ++)
		{
			if (foundArr[i] == false)
				return false;
		}
	
		return true;
	}
	else
	{
		for (var i = 0; i < foundArr.length; i ++)
		{
			if (foundArr[i] == true)
				return true;
		}
		
		return false;
	}
}
javascript_obj0026_016.js pdf-javascript-stream PDF /JS object 26 at offset 0x1778E 2847 bytes
SHA-256: 188a908fa79d1ccbba0b7fd097a9dd6d806a0b6a12816b4d6f1fa830305aed24
Preview script
First 1,000 lines of the extracted script
var charMapping = {"\u00A0":" ","\u00AD":"-","\u00B5":"\u03BC","\u00E6":"ae","\u017F":"s","\u0219":"s","\u021B":"t","\u05BE":"-","\u066B":",","\u066C":"'","\u037E":";","\u2010":"-","\u2013":"-","\u2014":"-","\u2015":"-","\u2018":"'","\u2019":"'","\u201C":"\u0022","\u201D":"\u0022","\u2024":".","\u2044":"/","\u20A4":"\u00A3","\u20A6":"NGN","\u20A7":"Pts","\u20A8":"Rs","\u20A9":"KRW","\u20AA":"ILS","\u20AB":"VND","\u20AC":"EUR","\u20AE":"MNT","\u20B1":"PHP","\u20B2":"PYG","\u20B5":"GHS","\u2170":"i","\u2174":"v","\u2179":"x","\u217C":"l","\u217D":"c","\u217E":"d","\u217F":"m","\u2212":"-","\u2215":"/","\u2223":"|","\uFF01":"!","\uFF02":"\u0022","\uFF04":"$","\uFF05":"%","\uFF06":"&","\uFF07":"'","\uFF08":"(","\uFF09":")","\uFF0B":"+","\uFF0C":",","\uFF0D":"-","\uFF0E":".","\uFF0F":"/","\uFF10":"0","\uFF11":"1","\uFF12":"2","\uFF13":"3","\uFF14":"4","\uFF15":"5","\uFF16":"6","\uFF17":"7","\uFF18":"8","\uFF19":"9","\uFF1A":":","\uFF1B":";","\uFF1C":"<","\uFF1D":"=","\uFF3B":"[","\uFF3D":"]","\uFF3F":"_","\uFF41":"a","\uFF42":"b","\uFF43":"c","\uFF44":"d","\uFF45":"e","\uFF46":"f","\uFF47":"g","\uFF48":"h","\uFF49":"i","\uFF4A":"j","\uFF4B":"k","\uFF4C":"l","\uFF4D":"m","\uFF4E":"n","\uFF4F":"o","\uFF50":"p","\uFF51":"q","\uFF52":"r","\uFF53":"s","\uFF54":"t","\uFF55":"u","\uFF56":"v","\uFF57":"w","\uFF58":"x","\uFF59":"y","\uFF5A":"z","\uFF5B":"{","\uFF5C":"|","\uFF5D":"}","\uFFE0":"c","\uFFE1":"\u00A3","\uFFE5":"\u00A5","\uFFE6":"\u20A9","\u20A1":"C","\u058A":"-","\u1806":"-","\u2011":"-","\u2012":"-","\u301C":"-","\u3030":"-","\uFE31":"-","\uFE32":"-","\uFE58":"-","\uFE63":"-","\u00E7":"c","\u015F":"s","\u0259":"e","\u0131":"i","\u00FC":"u","\u04B1":"\u04AF","\u011F":"g","\u00F6":"o","\u0439":"\u0438","\u04B9":"\u0447","\u045E":"\u0443","\u03AE":"\u03B7","\u03AF":"\u03B9","\u04A3":"\u043D","\u0142":"l","\u010D":"c","\u0107":"c","\u017E":"z","\u00F3":"o","\u00E0":"a","\u00ED":"i","\u00F2":"o","\u00FA":"u","\u00F1":"n","\u00E8":"e","\u00E9":"e","\u00EF":"i","\u00E1":"a","\u0159":"r","\u011B":"e","\u00FD":"y","\u0161":"s","\u016F":"u","\u0148":"n","\u00EE":"i","\u00F8":"o","\u00E4":"a","\u00A2":"c","\u03CA":"\u03B9","\u0390":"\u03B9","\u03CD":"\u03C5","\u03AC":"\u03B1","\u03AD":"\u03B5","\u03CE":"\u03C9","\u03CC":"\u03BF","\u03CB":"\u03C5","\u00EB":"e","\u0111":"d","\u00BA":"o","\u00F5":"o","\u00E3":"a","\u00FB":"u","\u00EA":"e","\u00F4":"o","\u0151":"o","\u00F0":"d","\u00EC":"i","\u049B":"\u043A","\u0117":"e","\u016B":"u","\u0173":"u","\u0105":"a","\u0101":"a","\u012B":"i","\u0113":"e","\u0137":"k","\u0123":"g","\u0146":"n","\u0451":"\u0435","\u0121":"g","\u010B":"c","\u0127":"h","\u00E5":"a","\u017A":"z","\u015B":"s","\u0144":"n","\u017C":"z","\u0119":"e","\u00E2":"a","\u0103":"a","\u0167":"t","\u013E":"l","\u0165":"t","\u010F":"d","\u0457":"\u0456","\u0491":"\u0433","\u04B3":"\u0445","\u0163":"t"};
javascript_obj0028_017.js pdf-javascript-stream PDF /JS object 28 at offset 0x17B83 10040 bytes
SHA-256: a862c3ff0be4b6e8e1a4ed20ca59fdded0cb583d2442c945783e90d4e1f7a7af
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 4 eval/decoder/string-building token(s).
Preview script
First 1,000 lines of the extracted script
// JScript source code

function splitDateParts(pattern)
{
	var partArr = new Array();
	var state = 0; // 0: init, 1: str, 2: possible finish, 3: pattern
	var curr = "";
	for (var i = 0; i < pattern.length; i ++)
	{
		var ch = pattern.charAt(i);
		var isQuote = (ch == "'");
		
		switch (state)
		{
			case 0:
				if (isQuote)
				{
					state = 1;
					curr = "";
				}
				else
				{
					state = 3;
					curr = ch;
				}
				break;
			case 1:
				if (isQuote)
				{
					state = 2;
				}
				else
				{
					curr += ch;
				}
				break;
			case 2:
				if (isQuote)
				{
					state = 1;
					curr += ch;
				}
				else
				{
					state = 3;
					//app.alert(curr);
					partArr.push({ isPattern : false, content : curr});
					curr = ch;
				}
				break;
			case 3: 
				if (isQuote)
				{
					state = 1;
					//app.alert(curr);
					partArr.push({ isPattern : true, content : curr});
					curr = "";
				}
				else
				{
					curr += ch;
				}
				break;
			default: break;
		}
	}
	if (curr != "")
	{	
		partArr.push({ isPattern : (state == 3), content : curr});
	}
	return partArr;
}

function formatDate(dateObject, pattern)
{
	var partArr = splitDateParts(pattern);
	
	var fullStr = "";
	for (var i = 0; i < partArr.length; i ++)
	{
		if (partArr[i].isPattern)
		{
			fullStr += partArr[i].content.replace(/([a-z])\1*/ig, function(match)
															{
															var s, pad;
															var c = match.charAt(0);
															var l = match.length;
															var widthList = ["abbreviated", "wide", "narrow"];
															var gregorian = cldr.calendar_gregorian;
															
															switch(c){
																case 'G':
																	var era = null;
																	if (l < 4)
																		era = gregorian.eraNames;
																	else if (l == 4)
																		era = gregorian.eraAbbr;
																	else
																		era = gregorian.eraNarrow;
																		
																	s = dateObject.getFullYear() < 0 ? era.beforeChrist : era.afterChrist;
																	break;
																case 'y':
																	s = "" + dateObject.getFullYear();
																	if (l == 2)
																	{
																		s = s.substr(s.length - 2);
																	}
																	pad = true;
																	break;
																case 'Q':
																case 'q':
																	var quarterContainer = null;
																	if (c == 'q')
																		quarterContainer = cldr.calendar_gregorian.quarters_format;
																	else
																		quarterContainer = cldr.calendar_gregorian.quarters_stand_alone;
																	if (l == 1)
																		quarterContainer = quarterContainer.narrow;
																	else if (l == 2)
																	{
																		quarterContainer = quarterContainer.narrow;
																		pad = true;
																	}
																	else if (l == 3)
																	{
																		quarterContainer = quarterContainer.abbreviated;
																	}
																	else
																	{
																		quarterContainer = quarterContainer.wide;
																	}
																	var quarter = Math.floor((dateObject.getMonth() / 3) + 1);
																	
																	
																	var quarterString = eval("quarterContainer._" + quarter);
																	s = quarterString;
																	
																	break;
																case 'M':
																case 'L':
																	var m = dateObject.getMonth();
																	var monthContainer;
																	switch(l){
																		case 1: case 2:
																			s = (m+1).toString();
																			pad = true;
																			break;
																		case 3:
																			if (c == 'M')
																				monthContainer = cldr.calendar_gregorian.months_format.abbreviated;
																			else if (c == 'L')
																				monthContainer = cldr.calendar_gregorian.months_stand_alone.abbreviated;
																			break;
																		case 4:
																			if (c == 'M')
																				monthContainer = cldr.calendar_gregorian.months_format.wide;
																			else if (c == 'L')
																				monthContainer = cldr.calendar_gregorian.months_stand_alone.wide;
																			break;
																		case 5:
																			if (c == 'M')
																				monthContainer = cldr.calendar_gregorian.months_format.narrow;
																			else if (c == 'L')
																				monthContainer = cldr.calendar_gregorian.months_stand_alone.narrow;
																		default:
																			break;
																	}
																	if(monthContainer)
																	{
																		m ++;
																		s = eval("monthContainer._" + m);
																	}
																	break;
																case 'w':
																	s = getWeekOfYear(dateObject).toString(); pad = true;
																	break;
																	
																case 'd':
																	s = dateObject.getDate().toString(); pad = true;
																	break;
																case 'D':
																	s = getDayOfYear(dateObject).toString(); pad = true;
																	break;
																case 'E':
																case 'e':
																case 'c':
																	var d = dateObject.getDay();
																	var widthD;
																	switch(l){
																		case 1: case 2:
																			s = d.toString();
																			pad = true;
																			break;
																			// else fallthrough...
																		case 3: case 4: case 5:
																			widthD = widthList[l-3];
																			break;
																	}
																	if(widthD){
																		var typeD = (c == 'c') ? "stand_alone" : "format";
																		var source = "cldr.calendar_gregorian.days_" + typeD + "." + widthD + "." + getDayName(d);
																		s = eval(source);
																	}
																	break;
																case 'a':
																	var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
																	s = eval("cldr.calendar_gregorian." + timePeriod);
																	break;
																case 'h':
																case 'H':
																case 'K':
																case 'k':
																	var h = dateObject.getHours();
																	// strange choices in the date format make it impossible to write this succinctly
																	switch (c){
																		case 'h': // 1-12
																			s = ((h % 12) || 12).toString();
																			break;
																		case 'H': // 0-23
																			s = h.toString();
																			break;
																		case 'K': // 0-11
																			s = (h % 12).toString();
																			break;
																		case 'k': // 1-24
																			s = (h || 24).toString();
																			break;
																	}
																	pad = true;
																	break;
																case 'm':
																	s = dateObject.getMinutes().toString(); pad = true;
																	break;
																case 's':
																	s = dateObject.getSeconds().toString(); pad = true;
																	break;
																case 'S':
																	s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3)).toString(); pad = true;
																	break;
																case 'A':
																	s = (dateObject.getTime() - new Date(dateObject.getFullYear(), dateObject.getMonth(), dateObject.getDate()).getTime()).toString();
																	break;
																case 'z':
																case 'Z':
																case 'v':
																case 'V':
																	var splitted = cldr.timeZoneNames.hourFormat.split(";");
																	if (splitted.length != 2)
																	{
																		s = "";
																		break;
																	}
																	
																	var offsetMinutes = -dateObject.getTimezoneOffset();
																	var negative = offsetMinutes < 0;
																	if (offsetMinutes < 0) offsetMinutes = -offsetMinutes;
																	
																	var hours = offsetMinutes / 60;
																	var minutes = offsetMinutes % 60;
																	var dummyDate = new Date(0, 0, 1, hours, minutes, 0);
																	var timezoneString = formatDate(dummyDate, negative ? splitted[1] : splitted[0]);
																	var gmtString = new String(cldr.timeZoneNames.gmtFormat);
																	s = gmtString.replace(/\{0}/, timezoneString);
																	break;
														//				case 'Y': case 'u': case 'W': case 'F': case 'g': case 'A':
														//					console.debug(match+" modifier unimplemented");*/
																default:
																	throw new Error("invalid pattern char: " + pattern);
															}
															if(pad)
															{
																s = padBefore(s, "0", l - s.length);
															}
															
															return s;
														});
		}
		else
			fullStr += partArr[i].content;
	}
	
	return fullStr;
}

function subtractDate(b, a)
{
	var miliA = a.getTime();
	var miliB = b.getTime();
	
	return (miliA - miliB) / 1000 / 3600 / 24;
}

function getDayOfYear(dateObject)
{
	return Math.floor(subtractDate(new Date(dateObject.getFullYear(), 0, 1), dateObject) + 1); // Number
}

function getDayName(day)
{
	switch (day)
	{
		case 0:
			return "sun";
		case 1:
			return "mon";
		case 2:
			return "tue";
		case 3:
			return "wed";
		case 4:
			return "thu";
		case 5:
			return "fri";
		case 6:
			return "sat";
		default:
			return "";
	}
}

function getWeekOfYear(dateObject)
{
	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1).getDay();
	var week = Math.floor((getDayOfYear(dateObject) + firstDayOfYear - 1) / 7) + 1;

	return week; // Number
}
javascript_obj0030_018.js pdf-javascript-stream PDF /JS object 30 at offset 0x18440 4291 bytes
SHA-256: e66c83b43272af17b0ed43ded35819c9f2825ef88d352cce828881d135b64e16
Preview script
First 1,000 lines of the extracted script
function getTypeFromArr(type, typeArr, parts)
{
	for (var i = 0; i < typeArr.length; i ++)
	{
		if (type == typeArr[i])
			return parts[i].content;
	}
	
	return null;
}

function evalTypes(typeArr, orderArr, initResultArray)
{
	var resultArr = new Array();
	var origOrderArr = orderArr.concat(new Array());
	
	while (!resultArrFull(typeArr))
	{
		removeIdentical(typeArr);
		while (hasUniqueElements(typeArr))
		{
			// match unique elements
			for (var i = 0; i < typeArr.length; i ++)
			{
				if (typeArr[i].length == 1)
				{
					resultArr[i] = typeArr[i][0];
					typeArr[i] = new Array();
					cleanUp(typeArr, resultArr[i], orderArr);
				}
			}
	
			removeIdentical(typeArr);
		}
		
		// no more unique elements, have a look at the desired order
		for (var i = 0; i < typeArr.length; i ++)
		{
			if (typeArr[i].length > 0)
			{
				var elemOrderArr = orderArr;//buildOrderArr(resultArr, orderArr, i, origOrderArr);
				for (var j = 0; j < elemOrderArr.length; j ++)
				{
					var brk = false;
					for (var k = 0; k < typeArr[i].length; k ++)
					{
						if (elemOrderArr[j] == typeArr[i][k])
						{
							resultArr[i] = typeArr[i][k];
							typeArr[i] = new Array();
							cleanUp(typeArr, resultArr[i], orderArr);
							
							brk = true;
							break;
						}
					}
					
					if (brk) break;
				}
			}
		}
		
		if (orderArr.length == 0)
			return resultArr;
	}
	
	return resultArr;
}

function removeIdentical(typeArr)
{
	// match two with same content
	for (var i = 0; i < typeArr.length; i ++)
	{
		for (var j = i+1; j < typeArr.length; j ++)
		{
			if (identicalTypes(typeArr[i], typeArr[j]))
			{
				for (var m = 0; m < typeArr[i].length; m ++)
				{
					for (var k = 0; k < typeArr.length; k ++)
					{
						if (k == i || k == j)
							continue;
							
						for (var l = typeArr[k].length-1; l >= 0 ; l --)
						{
							if (typeArr[k][l] == typeArr[i][m])
								typeArr[k].splice(l, 1);
						}
					}
				}
			}
		}
	}
}

function identicalTypes(arr1, arr2)
{
	if (arr1.length != arr2.length || arr1.length != 2)
		return false;
	else
	{
		for (var i = 0; i < arr1.length; i ++)
		{
			var matched = false;
			for (var j = 0; j < arr2.length; j ++)
			{
				if (arr1[i] == arr2[j])
				{
					matched = true;
					break;
				}
			}
			
			if (!matched)
				return false;
		}
		
		return true;
	}
}

/*function buildOrderArr(resultArr, orderArr, index, origOrderArr)
{
	var beforeMatchedIndex = index;
	while (resultArr[beforeMatchedIndex] == null && beforeMatchedIndex > -1)
		beforeMatchedIndex --;
	
	if (beforeMatchedIndex == -1)
		return orderArr;
	else
	{	
		var matchedType = resultArr[beforeMatchedIndex];
		var posOriginal = 0;
		while (posOriginal < origOrderArr.length && origOrderArr[posOriginal] != matchedType)
		{
			posOriginal ++;
		}
		if (posOriginal >= origOrderArr.length)
			return orderArr;
		else
		{
			var arr1 = origOrderArr.slice(posOriginal);
			var arr2 = origOrderArr.slice(0, posOriginal);
			
			var newArr = arr1.concat(arr2);
			for (var i = newArr.length-1; i >= 0 ; i --)
			{
				var found = false;
				for (var j = 0; j < orderArr.length; j ++)
				{
					if (orderArr[j] == newArr[i])
					{
						found = true;
						break;
					}
				}
				
				if (!found)
					newArr.splice(i, 1);
			}
			
			return newArr;
		}
	}
}*/

function removeFromOrderArr(type, orderArr)
{
	for (var i = orderArr.length-1; i >= 0; i --)
	{
		if ((type & orderArr[i]) != 0)
		{
			orderArr.splice(i, 1);
		}
	}
}

function resultArrFull(typeArr)
{
	for (var i = 0; i < typeArr.length; i ++)
	{
		if (typeArr[i].length != 0)
			return false;
	}
	
	return true;
}

function hasUniqueElements(typeArr)
{
	for (var i = 0; i < typeArr.length; i ++)
	{
		if (typeArr[i].length == 1)
			return true;
	}
	
	return false;
}

function cleanUp(typeArr, remove, orderArr)
{
	// remove all possibilities from old array
	for (var j = 0; j < typeArr.length; j ++)
	{
		for (var k = 0; k < typeArr[j].length; k ++)
		{
			if (remove == typeArr[j][k])
				typeArr[j].splice(k, 1);
		}
	}
	
	removeFromOrderArr(remove, orderArr);
}
javascript_obj0032_019.js pdf-javascript-stream PDF /JS object 32 at offset 0x18943 11981 bytes
SHA-256: f0ec97d840ccf21d7d3207b6e09077506386513958c94020bc39ca48dfe900a1
Preview script
First 1,000 lines of the extracted script
var typeWeekday = 1;
var typeDay = 2;
var typeMonth = 4;
var typeYear = 8;
	
// parses a date (1th of avril)
function parseDate(str, strictParsing, orderRequired)
{
	// convert always to string
	str = str + "";
	
	// split in all parts
	var parts = splitString(str, null, true);
	
	var orderArr = getPatternOrder();
	completeOrderArray(orderArr);
	
	var matchedMonth;
	var matchedWeekday;
	
	var testedMonths = new Array();
	var testedWeekdays = new Array();
	
	var whereMonthFound = { value : -1 };
	var whereWeekdayFound = { value : -1 };
	var partsToMatch = parts.concat(new Array());
	
	if (weekIsBeforeMonth(orderArr))
	{
		matchedWeekday = matchWeekday(partsToMatch, testedWeekdays, whereWeekdayFound, false);
		matchedMonth = matchMonth(partsToMatch, testedMonths, whereMonthFound, false);
		
		if (matchedWeekday == null)
			matchedWeekday = matchWeekday(partsToMatch, testedWeekdays, whereWeekdayFound, true);
		if (matchedMonth == null)
			matchedMonth = matchMonth(partsToMatch, testedMonths, whereMonthFound, true);
	}
	else
	{
		matchedMonth = matchMonth(partsToMatch, testedMonths, whereMonthFound, false);
		matchedWeekday = matchWeekday(partsToMatch, testedWeekdays, whereWeekdayFound, false);
		
		if (matchedMonth == null)
			matchedMonth = matchMonth(partsToMatch, testedMonths, whereMonthFound, true);
		if (matchedWeekday == null)
			matchedWeekday = matchWeekday(partsToMatch, testedWeekdays, whereWeekdayFound, true);
	}
	
	var possibilities = new Array();
	for (var i = 0; i < parts.length; i ++)
	{
		possibilities[i] = new Array();
		if (i == whereMonthFound.value)
		{
			possibilities[i].push(typeMonth);
		}
		else if (parts[i].type == 1)
		{
			if (isMonth(parts[i].content) && matchedMonth == null)
				possibilities[i].push(typeMonth);
			if (isDay(parts[i].content))
				possibilities[i].push(typeDay);
			if (isYear(parts[i].content))
				possibilities[i].push(typeYear);
		}
	}
	
	var resultArr = evalTypes(possibilities, orderArr);
	
	
	
	if (strictParsing != undefined && strictParsing == true)
	{
		if (parts.length > 3) return undefined;
		for (var i = 0; i < parts.length; i ++)
		{
			if (resultArr[i] == -1 || resultArr[i] == undefined)
				return undefined;
		}
	}
	
	if (orderRequired != undefined && orderRequired == true)
	{
		var patternOrderInverse = new Array();
		orderArr = getPatternOrder();
		completeOrderArray(orderArr);
		for (var i = 0; i < orderArr.length; i ++)
		{
			if (orderArr[i] != typeWeekday)
			{
				patternOrderInverse[orderArr[i]] = i;
			}
		}
		
		
		
		var whereFoundArr = new Array();
		
		for (var i = 0; i < parts.length; i ++)
		{
			if (resultArr[i] == typeDay)
				whereFoundArr[patternOrderInverse[typeDay]] = i;
			else if (resultArr[i] == typeMonth)
				whereFoundArr[patternOrderInverse[typeMonth]] = i;
			else if (resultArr[i] == typeYear)
				whereFoundArr[patternOrderInverse[typeYear]] = i;
		}
		
		var currMax = -1;
		for (var i = 0; i < orderArr.length; i ++)
		{
			if (whereFoundArr[i] != undefined)
			{
				if (whereFoundArr[i] <= currMax)
					return undefined;
				currMax = whereFoundArr[i];
			}
		}
	}
	
	var resDay = getTypeFromArr(typeDay, resultArr, parts);
	var resMonth = matchedMonth == null ? getTypeFromArr(typeMonth, resultArr, parts) : matchedMonth;
	var resYear = getTypeFromArr(typeYear, resultArr, parts);
	
	var resultDate = completeDate(resYear, resMonth, resDay, matchedWeekday, parts);
	
	return resultDate;
}

function completeDate(resYear, resMonth, resDay, matchedWeekday, parts)
{
	var day;
	var month;
	var year;
	
	var currDate = new Date();
	var relative = false;
	if (resYear != null)
	{
		if (resYear.length == 2)
		{
			var minYear = currDate.getFullYear() - 79;
			var maxYear = currDate.getFullYear() + 20;
			var currDecade = Math.floor(currDate.getFullYear() / 100);
			for (var i = -1; i <= 1; i ++)
			{
				var resultYear = resYear*1 + (currDecade+i) * 100;
				if (resultYear <= maxYear && resultYear >= minYear)
				{
					resYear = resultYear;
					break;
				}
			}
		}
	
		if (resMonth != null)
		{
			if (resDay != null)
			{
				year = resYear;
				month = resMonth;
				day = resDay;
			}
			else
			{
				year = resYear;
				month = resMonth;
				day = findFirstWeekdayAfter(new Date(year*1, month*1-1, 1), matchedWeekday).getDate();
			}
		}
		else
		{
			if (resDay != null)
			{
				year = resYear;
				month = currDate.getMonth()+1;
				day = resDay;
				relative = true;
			}
			else
			{
				year = resYear;
				month = 1;
				day = findFirstWeekdayAfter(new Date(year*1, month*1-1, 1), matchedWeekday).getDate();
			}
		}
	}
	else
	{
		if (resMonth != null)
		{
			if (resDay != null)
			{
				year = currDate.getFullYear().toString();
				month = resMonth;
				day = resDay;
			}
			else
			{
				year = currDate.getFullYear().toString();
				month = resMonth;
				day = findFirstWeekdayAfter(new Date(year*1, month*1-1, 1), matchedWeekday).getDate();
			}
		}
		else
		{
			if (resDay != null)
			{
				year = currDate.getFullYear().toString();
				month = currDate.getMonth()+1;
				day = resDay;
			}
			else
			{
				if (matchedWeekday != null)
				{
					var date = findFirstWeekdayAfter(currDate, matchedWeekday);
					year = date.getFullYear().toString();
					month = date.getMonth()+1;
					day = date.getDate();
				}
				else
				{
					var found = false;
					for (var matchPrecision = 0; matchPrecision < 3; matchPrecision ++)
					{
						for (var i = 3; i >= -3; i --)
						{
							var matchArr = getCached(cachedCldr["calendar"]["relative_days"]["_"+i], cldr["calendar_gregorian"]["relative_days"]["_"+i]);
							if (matchWithNames(parts, "", matchArr, matchPrecision < 1, matchPrecision < 2) != null)
							{
								var today = new Date();
								var newDate = new Date();
								newDate.setTime(today.getTime() + i*24*3600*1000);
								
								year = newDate.getFullYear();
								month = newDate.getMonth() + 1;
								day = newDate.getDate();
								found = true;
								break;
							}
						}
						
						if (found) break;
					}
					
					// no valid date specified
					if (!found)
					{
						return null;
					}
				}
			}
		}
		
		relative = true;
	}
	
	var resultDate = new Date(year*1, month*1 - 1, day*1, 0, 0, 0, 0);
	if (resultDate.getMonth() != (month*1 - 1) || resultDate.getDate() != day*1 || resultDate.getFullYear() != year*1)
		return null;
	else
		return { relative : relative, date : resultDate };
}

function findFirstWeekdayAfter(date, matchedWeekday)
{
	if (matchedWeekday == null)
		return date;
	else
	{
		if (date.getDay() > matchedWeekday)
			matchedWeekday += 7;
		
		var diff = matchedWeekday - date.getDay();
		var newDate = new Date();
		newDate.setTime(date.getTime() + diff * 24 * 3600 * 1000);
		return newDate;
	}
}

function completeOrderArray(orderArr)
{
	var hasDay = false;
	var hasMonth = false;
	var hasYear = false;
	
	for (var i = 0; i < orderArr.length; i ++)
	{
		switch (orderArr[i])
		{
			case typeDay:
				hasDay = true;
				break;
			case typeMonth:
				hasMonth = true;
				break;
			case typeYear:
				hasYear = true;
				break;
			default: break;
		}
	}
	
	if (!hasDay)
		orderArr.push(typeDay);
	if (!hasMonth)
		orderArr.push(typeMonth);
	if (!hasYear)
		orderArr.push(typeYear);
}

function weekIsBeforeMonth(orderArr)
{
	for (var i = 0; i < orderArr.length; i ++)
	{
		if (orderArr[i] == typeMonth)
			return false;
		else if (orderArr[i] == typeWeekday)
			return true;
	}
}

function matchMonth(parts, tested, whereFound, matchAll)
{
	var monthArr = new Array("_1", "_2", "_3", "_4", "_5", "_6", "_7", "_8", "_9", "_10", "_11", "_12");
	var matched = !matchAll ? matchMonthOrWeekday(parts, "months", monthArr, tested, whereFound) : matchMonthOrWeekdayAll(parts, "months_all", monthArr, tested, whereFound);
	if (matched != null)
		return matched + 1;
	else
		return null;
}

function matchWeekday(parts, tested, whereFound, matchAll)
{
	var dayArr = new Array("sun", "mon", "tue", "wed", "thu", "fri", "sat");
	return !matchAll ? matchMonthOrWeekday(parts, "days", dayArr, tested, whereFound) : matchMonthOrWeekdayAll(parts, "days_all", dayArr, tested);
}

function matchMonthOrWeekdayAll(parts, prefix, typeArr, tested, whereFound)
{
	if (!partsHasWord(parts)) return null;

	for (var matchPrecision = 2; matchPrecision < 3; matchPrecision ++)
	{
		for (var k = 0; k < typeArr.length; k ++)
		{
			var testArr = cldr["calendar_gregorian"][prefix][typeArr[k]];
			for (var j = 0; j < testArr.length; j ++)
			{
				var cldrString = testArr[j];
				if (tested[cldrString] != null) continue;
				
				var partArr = getCached(cachedCldr["calendar"][prefix][typeArr[k]][j], testArr[j]);
				//app.alert("" + partArr[0][0].full + (matchPrecision < 1) + (matchPrecision < 2));
				if (matchWithNames(parts, "", partArr, matchPrecision < 1, matchPrecision < 2, true, whereFound) != null)
					return k;
			}
		}
	}
}

function matchMonthOrWeekday(parts, prefix, typeArr, tested, whereFound)
{
	if (!partsHasWord(parts)) return null;

	for (var i = 0; i < 2; i ++)
	{
		for (var matchPrecision = 0; matchPrecision < 3; matchPrecision ++)
		{
			for (var j = 0; j < 2; j ++)
			{
				var formatCont;
				switch (j)
				{
					case 1: formatCont = "abbreviated"; break;
					case 0: formatCont = "wide"; break;
				}
				var currContainer = cldr["calendar_gregorian"][prefix + (i == 0 ? "_format" : "_stand_alone")][formatCont];
				var cachedContainer = cachedCldr["calendar"][prefix + (i == 0 ? "_format" : "_stand_alone")][formatCont];
				
				
				for (var k = 0; k < typeArr.length; k ++)
				{
					var cldrString = currContainer[typeArr[k]];
					if (tested[cldrString] != null) continue;
					
					var matchArr = getCached(cachedContainer[typeArr[k]], currContainer[typeArr[k]]);
					if (matchWithNames(parts, "", matchArr, matchPrecision < 1, matchPrecision < 2, true, whereFound) != null)
						return k;
				}
			}
		}
		
		/*for (var k = 0; k < typeArr.length; k ++)
		{
			var cldrString = currContainer[typeArr[k]];
			tested[cldrString] = cldrString;
		}*/
	}

	return null;
}

function partsHasWord(parts)
{
	// test if it can has a month
	var hasWord = false;
	for (var i = 0; i < parts.length; i ++)
	{
		if (parts[i].type == 2)
			hasWord = true;
	}
	if (!hasWord)
		return false;
	else
		return true;
}

function isDay(numberStr)
{
	var number = numberStr * 1;
	return number >= 1 && number <= 31;
}

function isMonth(numberStr)
{
	var number = numberStr * 1;
	return number >= 1 && number <= 12;
}

function isYear(numberStr)
{
	return numberStr.length == 2 || numberStr.length == 4;
}

function getPatternOrder()
{
	var parts = splitDateParts(cldr["calendar_gregorian"]["dateFormats"]["long"]);
	
	var typeWeekdaySet = false;
	var typeDaySet = false;
	var typeMonthSet = false;
	var typeYearSet = false;
	
	var orderArr = new Array();
	for (var i = 0; i < parts.length; i ++)
	{
		if (parts[i].isPattern)
		{
			for (var j = 0; j < parts[i].content.length; j ++)
			{
				var ch = parts[i].content.charAt(j);
				
				if ((ch == "d" || ch == "D") && !typeDaySet)
				{
					orderArr.push(typeDay);
					typeDaySet = true;
				}
				else if ((ch == "e" || ch == "E") && !typeWeekdaySet)
				{
					orderArr.push(typeWeekday);
					typeWeekdaySet = true;
				}
				else if ((ch == "m" || ch == "M") && !typeMonthSet)
				{
					orderArr.push(typeMonth);
					typeMonthSet = true;
				}
				else if ((ch == "y" || ch == "Y") && !typeYearSet)
				{
					orderArr.push(typeYear);
					typeYearSet = true;
				}
			}
		}
	}
	
	return orderArr;
}
javascript_obj0034_020.js pdf-javascript-stream PDF /JS object 34 at offset 0x19439 3240 bytes
SHA-256: e1eb1ae9a28ca6809e490ab94557d9217f0ed671a55379737b41e00e159fd8d3
Preview script
First 1,000 lines of the extracted script
// parses a time (12:34:12)
function parseTime(str)
{
	// convert always to string
	str = str + "";
	
	// split in all parts
	var parts = splitString(str, null, true);
	
	// look for am or pm
	var amPm = matchAmPm(parts);
	var hourMax = 24;
	var minuteMax = 59;
	var secondMax = 59;
	
	var possibilityHour = 1;
	var possibilityMinute = 2;
	var possibilitySecond = 4;
	var possibilities = new Array();
	for (var i = 0; i < parts.length; i ++)
	{
		possibilities[i] = new Array();
		if (parts[i].type == 1)
		{
			if (isTime(parts[i].content, hourMax))
				possibilities[i].push(possibilityHour);
			if (isTime(parts[i].content, minuteMax))
				possibilities[i].push(possibilityMinute);
			if (isTime(parts[i].content, secondMax))
				possibilities[i].push(possibilitySecond);
			if (isHourAndMinute(parts[i].content))
				possibilities[i].push(possibilityHour | possibilityMinute);
		}
	}
	
	var resultArr = evalTypes(possibilities, new Array(possibilityHour | possibilityMinute, possibilityHour, possibilityMinute, possibilitySecond));
	var hour = null;
	var minute = null;
	var second = null;
	
	var resHourMinute = getTypeFromArr(possibilityHour | possibilityMinute, resultArr, parts);
	var resHour = getTypeFromArr(possibilityHour, resultArr, parts);
	var resMinute = getTypeFromArr(possibilityMinute, resultArr, parts);
	var resSecond = getTypeFromArr(possibilitySecond, resultArr, parts);
	
	if (resHourMinute != null)
	{
		var number = resHourMinute*1;
		hour = Math.floor(number / 100);
		minute = number % 100;
	}
	else
	{
		if (resHour != null)
			hour = resHour * 1;
			
		if (resMinute != null)
			minute = resMinute * 1;
	}
	
	if (resSecond != null)
	{
		second = resSecond*1;
	}
	
	if (hour == null) hour = 0;
	if (minute == null) minute = 0;
	if (second == null) second = 0;
	
	// look for am/pm
	if (amPm == "am" && hour <= 12)
	{
		hour = hour % 12;
	}
	else if (amPm == "pm" && hour <= 12)
	{
		hour = (hour % 12) + 12;
	}
	
	var resultDate = new Date(2008, 0, 1, hour, minute, second);
	return resultDate;
}

function isHourAndMinute(str)
{
	if (str.length <= 2) return false;
	
	var number = str*1;
	if (number <= 2400 && number % 100 < 60) return true;
	else return false;
}

function isTime(str, maxValue)
{
	return str*1 <= maxValue;
}

function matchAmPm(parts)
{
	var amArr = getCached(cachedCldr["calendar"]["am"], cldr["calendar_gregorian"]["am"]);
	var pmArr = getCached(cachedCldr["calendar"]["pm"], cldr["calendar_gregorian"]["pm"]);
	
	if (matchWithNames(parts, "", amArr, true, true) != null)
		return "am";
	else if (matchWithNames(parts, "", pmArr, true, true) != null)
		return "pm";
	else if (matchWithNames(parts, "", amArr, false, true) != null)
		return "am";
	else if (matchWithNames(parts, "", pmArr, false, true) != null)
		return "pm";
	else if (matchWithNames(parts, "", amArr, true, false) != null)
		return "am";
	else if (matchWithNames(parts, "", pmArr, true, false) != null)
		return "pm";
	else if (matchWithNames(parts, "", amArr, false, false) != null)
		return "am";
	else if (matchWithNames(parts, "", pmArr, false, false) != null)
		return "pm";
	else
		return "";
}
javascript_obj0036_021.js pdf-javascript-stream PDF /JS object 36 at offset 0x1981C 8284 bytes
SHA-256: 5c846df3aa78f4be63ebcbf1ee92a28b359eed60e284693e5daa5203b284a497
Preview script
First 1,000 lines of the extracted script
function currencyCldr_formatGeneral(number, currency, showZero, numberPatternOrig, currencyPatternOrig, currencyFormatType, overrideRounding)
{
	// don't show if number is zero
	if(number == 0 && !showZero)
	{
		return "";
	}
	
	// number pattern
	var numberPattern;
	if (numberPatternOrig != "")
	{
		numberPattern = numberPatternOrig;
	}
	else
	{
		// get from cldr
		numberPattern = cldr.numbers_currencyFormats.currencyPattern;
		numberPattern = numberPattern.replace(/\u00A4/g, "");
		numberPattern = numberPattern.replace(/\ /g, "");
		numberPattern = numberPattern.replace(/\u00A0/g, "");
	}

	// currency pattern
	var currencyPattern;
	var currencyNamePattern;
	if (currencyPatternOrig != "")
	{
		if (currencyFormatType == 2)
		{
			currencyNamePattern = currencyPatternOrig;
			currencyNamePattern = currencyNamePattern.replace(/(([^\\])#|^#)/, "$2{0}");
			currencyNamePattern = currencyNamePattern.replace(/(([^\\])\$|^\$)/, "$2{1}");
			currencyPattern = numberPattern;
		}
		else
		{
			currencyPattern = currencyPatternOrig;
			currencyPattern = currencyPattern.replace(/\\\\/,"\\");
			currencyPattern = currencyPattern.replace(/(([^\\])#|^#)/, "$2" + numberPattern);
			currencyPattern = currencyPattern.replace(/(([^\\])\$|^\$)/, "$2\u00a4");
		}
	}
	else if (currencyFormatType != 2)
	{
		currencyPattern = cldr.numbers_currencyFormats.currencyPattern;
	}
	else
	{
		currencyPattern = numberPattern;
	}
	
	return formatCurrency(number, currencyFormatType, currencyPattern, currency, currencyNamePattern, overrideRounding);
}

/*
formatCurrency

formats a number to a currency

params:
    number: the amount of currency
    
    type: 0 - symbol
          1 - 3-letter currencycode
          2 - full name
          
    pattern: for type=0,1 the currencyFormat/pattern, for type=2 the unitPattern in currencies

returns:
	the formatted currency string
*/
function formatCurrency(number, type, pattern, currency, currencyPattern, overrideRounding)
{
	// check if currency available
	if (cldr.numbers_currencies[currency] == undefined)
	{
		console.println("currency '" + currency + "' not available when formatting currency");
		console.println("please place a hidden currency field with this currency in to the form");
		return "";
	}
	
	// round the value
	var struct = roundCurrency(number, currency, overrideRounding);
	number = struct.number;
	
    switch (type)
    {
		// use the pattern as a "currencyFormat/pattern" pattern
        case 0:
        case 1:
			var symbol = "";
			if (type == 0)
			{
				symbol = currency;
			}
			else if (type == 1)
			{
				var evaluated;
				if (cldr.numbers_currencies[currency] != null)
					evaluated = cldr.numbers_currencies[currency].symbol;
				
				// fallback if no currency available
				if (!evaluated || evaluated == "")
				{
					symbol = currency;
				}
				else
				{
					// look for a choice pattern
					if (evaluated.indexOf("|") != -1)
					{
						var choices = evaluated.split('|');
						
						// match from right to left
						for (var i = choices.length-1; i >= 0; i --)
						{
							var relationPos = choices[i].search(/\u2264|</);
							if (relationPos == -1) continue;
							var constant = choices[i].substr(0, relationPos) * 1;
							var resultString = choices[i].substr(relationPos+1);
							var relationStr = choices[i].substr(relationPos, 1);
							
							// eval relation or always take the last element
							if ((relationStr == "\u2264" ? constant <= number : constant < number) || i == 0)
							{
								symbol = resultString;
								break;
							}
						}
					}
					else
					{
						symbol = evaluated;
					}
				}
			}
			
			// format it
			var formatted = formatNumber(number, pattern, struct.numDigits);
			var replacement = insertCurrencySpacing(formatted, symbol);
			return formatted.replace(/\u00a4/, replacement);
			
        case 2:
        
            // determine the count
            var count = "";
            if (cldr.supplemental_plurals.zero(number))
				count = "zero";
			else if (cldr.supplemental_plurals.one(number))
				count = "one";
			else if (cldr.supplemental_plurals.two(number))
				count = "two";
			else if (cldr.supplemental_plurals.few(number))
				count = "few";
			else if (cldr.supplemental_plurals.many(number))
				count = "many";
			else
				count = "other";
			
			var patternEval;
            if (currencyPattern == null)
            {
				// get unitPattern
				patternEval = cldr.numbers_currencyFormats.unitPatterns[count];
				if (patternEval == null)
				{
					patternEval = cldr.numbers_currencyFormats.unitPatterns.other;
				}
			}
			else
			{
				patternEval = currencyPattern;
			}
			
			var dispNameEval = cldr.numbers_currencies[currency]["displayName_" + count];
			if (dispNameEval == null)
				dispNameEval = cldr.numbers_currencies[currency].displayName_other;
			if (dispNameEval == null)
				dispNameEval = cldr.numbers_currencies[currency].displayName_;
			if (dispNameEval == null)
				dispNameEval = currency;
			
			var formattedNumber = formatNumber(number, pattern, struct.numDigits);
			patternEval = patternEval.replace(/\{0}/, formattedNumber);
			patternEval = patternEval.replace(/\{1}/, dispNameEval);
			
			return patternEval;
		
		default:
			throw new Error("invalid type for format currency");
    }
}

function roundCurrency(number, currency, overrideRounding)
{
	var digits;
	if (cldr.supplemental_currencyData_fractions[currency] != null)
		digits = cldr.supplemental_currencyData_fractions[currency].digits;
	if (digits == null)
	{
		digits = cldr.supplemental_currencyData_fractions.DEFAULT.digits;
		if (digits == null)
		{
			digits = 0;
		}
	}
	
	var rounding;
	if (cldr.supplemental_currencyData_fractions[currency] != null)
		rounding = cldr.supplemental_currencyData_fractions[currency].rounding;
	if (rounding == null)
	{
		rounding = cldr.supplemental_currencyData_fractions.DEFAULT.rounding;
		if (rounding == null)
		{
			rounding = 0;
		}
	}
	
	if (rounding != 0 && (overrideRounding == undefined || overrideRounding == false))
	{
		var factor = 1;
		for (var i = 0; i < digits; i ++)
			factor /= 10;

		var roundValue = rounding * factor;
		
		number = number / roundValue;
		number = Math.round(number);
		number = number * roundValue;
	}
	return { number : number, numDigits : digits };
}

function insertCurrencySpacing(str, symbol)
{
	// find pos of currency symbol
	var symbolIndex = str.indexOf("\u00a4");
	if (symbolIndex == -1) return "";
	
	// before and after currency
	var beforeCurrency = "";
	var afterCurrency = "";
	for (var i = 0; i < 2; i ++)
	{
		if ((i == 0 && symbolIndex == 0) || (i == 1 && symbolIndex == str.length-1))
			continue;

		var currencyContainer = i == 0 ? cldr.numbers_currencyFormats.currencySpacing.beforeCurrency : cldr.numbers_currencyFormats.currencySpacing.afterCurrency;
		var currencyMatch = currencyContainer.currencyMatch;
		var surroundingMatch = currencyContainer.surroundingMatch;
		var insertBetween = currencyContainer.insertBetween;
	
		var surroundingChar = str.charCodeAt(i == 0 ? symbolIndex-1 : symbolIndex+1);
		var currencyChar = symbol.charCodeAt(i == 0 ? 0 : symbol.length-1);
		
		var surroundTrue = matchRegexp(surroundingChar, surroundingMatch);
		var currencyTrue = matchRegexp(currencyChar, currencyMatch);
		
		if (surroundTrue && currencyTrue)
		{
			if (i == 0)
				beforeCurrency = insertBetween;
			else
				afterCurrency = insertBetween;
		}
	}
	
	return beforeCurrency.concat(symbol).concat(afterCurrency);
}

function matchRegexp(charCode, exp)
{
	// dummy implementation uf UTS #18 http://unicode.org/reports/tr18/
	var minChar;
	var maxChar;
	if (exp == "[:letter:]")
	{
		minChar = ("A").charCodeAt(0);
		maxChar = ("z").charCodeAt(0);
	}
	else if (exp == "[:digit:]")
	{
		minChar = ("0").charCodeAt(0);
		maxChar = ("9").charCodeAt(0);
	}
	else
		throw new Error("regexp " + exp + " not implemented");
		
	if (charCode >= minChar && charCode <= maxChar)
		return true;
	else
		return false;
}
javascript_obj0062_022.js pdf-javascript-stream PDF /JS object 62 at offset 0x1A156 213 bytes
SHA-256: 88cf83eacfa4ab997462d207c0c2ed6b53626fc3794ce976e7bdf29d2c84f5d4
Preview script
First 1,000 lines of the extracted script
if (this.getField("swissformsSaveUrl").valueAsString != ""){
	if (app.viewerVersion >= 7.0){
		app.launchURL(this.getField("swissformsSaveUrl").valueAsString, true);this.getField("swissformsSaveUrl").value = "";}}
javascript_obj0068_023.js pdf-javascript-stream PDF /JS object 68 at offset 0x1A21C 107 bytes
SHA-256: f24f44ca9d60dd42a63432989aaa4b625b3f58ca8efbcc9b7f760bb4a53d1e2a
Preview script
First 1,000 lines of the extracted script
if(event.source != undefined && event.source.type == "checkbox") checkboxChanged(event);handleEvent(event);
javascript_obj0073_024.js pdf-javascript-stream PDF /JS object 73 at offset 0x1A2B4 22529 bytes
SHA-256: d525969f37c2901a8a7bbb3f0c165714e656d3de62dc328dfaca4fcf93c5f648
Preview script
First 1,000 lines of the extracted script
var checkbox_groupValidating = new Array();

function checkboxChanged(event)
{	
	if(event.source != null)
	{
		var field = event.source;
		var fieldName = field.name;
		var mode = fields[fieldName]["cbMode"];

		var group = fields[fieldName]["cbGroup"];
		
		if (checkbox_groupValidating[group] != undefined && checkbox_groupValidating[group] == true)
			return;
		checkbox_groupValidating[group] = true;
		
		if(mode == 0) // 0 or 1
		{
			var cbGroupFields = getCbGroupFields(fields[fieldName]["cbGroup"], field);
		
			if(field.value != "Off")
			{
				for(var i = 0; i < cbGroupFields.length; i++)
				{
					if(cbGroupFields[i] != field && cbGroupFields[i].value != "Off")
					{	
						cbGroupFields[i].value = "Off";
						checkbox_generateCalculateEvent(cbGroupFields[i]);
					}
				}
			}
		
			validateCbGroup(cbGroupFields, field);
		}
		else if(mode == 1) // 0 or N
		{
			var cbGroupFields = getCbGroupFields(fields[fieldName]["cbGroup"], field);
			validateCbGroup(cbGroupFields, field);
		}
		else if(mode == 2) // 1
		{
			var cbGroupFields = getCbGroupFields(fields[fieldName]["cbGroup"], field);
		
			if(field.value != "Off")
			{
				for(var i = 0; i < cbGroupFields.length; i++)
				{
					if(cbGroupFields[i] != field && cbGroupFields[i].value != "Off")
					{
						cbGroupFields[i].value = "Off";
						checkbox_generateCalculateEvent(cbGroupFields[i]);
					}
				}
			}
			else
			{
				//event.rc = false;
				//return;
			}
		
			validateCbGroup(cbGroupFields, field);
		}
		else if(mode == 3) // 1 or N
		{
			var cbGroupFields = getCbGroupFields(fields[fieldName]["cbGroup"], field);
		
			validateCbGroup(cbGroupFields, field);
		}
		
		checkbox_groupValidating[group] = false;
	}
}

function checkbox_generateCalculateEvent(field)
{
	var newEvent = { name : "Calculate", source : field, target : getField("swissformsFormId")};
	handleEvent(newEvent);
}

function validateCbGroup(checkboxes, currField)
{
	var mode = fields[checkboxes[0].name]["cbMode"];
	
	if(mode == 2)
	{
		var oneIsChecked = false;
		
		for(var i = 0; i < checkboxes.length; i++)
		{
			if(checkboxes[i].value != "Off") oneIsChecked = true;
		}
		
		for(var i = 0; i < checkboxes.length; i++)
		{			
			if(oneIsChecked)
			{
				fields[checkboxes[i].name]["validity"] = VALID;
			}
			else
			{
				fields[checkboxes[i].name]["_invalidityReason"] = INVALIDITY_REASON_OTHER;
				fields[checkboxes[i].name]["validity"] = INVALID;
			}
		}
	}
	else if(mode == 3)
	{
		var oneIsChecked = false;
		
		for(var i = 0; i < checkboxes.length; i++)
		{
			if(checkboxes[i].value != "Off") oneIsChecked = true;
		}
		
		for(var i = 0; i < checkboxes.length; i++)	
		{
			if(!oneIsChecked)
			{
				fields[checkboxes[i].name]["validity"] = INVALID;
				fields[checkboxes[i].name]["_invalidityReason"] = INVALIDITY_REASON_OTHER;
			}
			else
			{
				fields[checkboxes[i].name]["validity"] = VALID;
			}
		}
	}
	else
	{
		for(var i = 0; i < checkboxes.length; i++)
		{
			fields[checkboxes[i].name]["validity"] = VALID;
		}
	}
	
	ignoreAllEvents = true;
	for(var i = 0; i < checkboxes.length; i++)
	{
		// validate checkbox
		var dummyEvent = new Object();
		dummyEvent.target = checkboxes[i];
		dummyEvent.value = checkboxes[i].value;
		if (fields[checkboxes[i].name]["validity"] == VALID)
		{	
			dummyEvent.name = "Validate";
			dummyEvent.target = checkboxes[i];
			dummyEvent.value = checkboxes[i].value;
			validation_validate(dummyEvent);
		}
		
		if (checkboxes[i] != currField)
		{
			dummyEvent.name = "Blur";
			checkbox_deactivate(dummyEvent);
		}
		/*else
		{
			dummyEvent.name = "Blur";
			handleEvent(dummyEvent);
		}*/
	}
	ignoreAllEvents = false;
}

function getCbGroupFields(groupName, field)
{
	// ignore grouping if no group
	if (groupName == "" || groupName == undefined)
	{
		var arr = new Array();
		arr.push(field)
		return arr;
	}

	return CACHED_CB_GROUPS[groupName];
}

function checkbox_deactivate(event)
{
	var field = event.target;

	if (checkbox_groupValidating[fields[field.name]["cbGroup"]] != undefined && checkbox_groupValidating[fields[field.name]["cbGroup"]] == true && eventLevel == 2)
		return;
	
	deactivateField(event);
	
	checkbox_updateColor(field);		
}

function checkbox_updateColor(field)
{
	if(field.readonly != true)
	{
		if(fields[field.name]["validity"] != undefined)
		{
			var validity = fields[field.name]["validity"];
			
			if(fields[field.name]["_empty"] == true) field.fillColor = fields[field.name]["emptyColor"];
			else if(validity == VALID) field.fillColor = fields[field.name]["okColor"];
			else if(validity == INVALID) field.fillColor = fields[field.name]["invalidColor"];
		}
		else
		{
			field.fillColor = fields[field.name]["backgroundColor"];
		}
	}
	else
	{
		field.fillColor = fields[field.name]["backgroundColor"];
	}
}

function checkbox_validate(event)
{
	event.source = event.target;
	checkboxChanged(event);
}function resetForm_reset(event)
{
	var field = event.target;
	var fieldName = field.name;
	if (fields[fieldName]["resetBehavior"] != undefined && fields[fieldName]["resetBehaviorMessage"] != undefined && fields[fieldName]["resetBehaviorTitle"] != undefined)
	{
		if (app.alert(fields[fieldName]["resetBehaviorMessage"], 2, 2, fields[fieldName]["resetBehaviorTitle"]) == 3)
			return;
	}
	
	event.target.doc.resetForm();

	initForm();

	var icon = createIcon("", 1, 1);
	for(var j = 0; j < dmArray.length; j++)
	{
		event.target.doc.getField(dmArray[j]).buttonSetIcon(icon);
	}
}var CANCEL_VALIDATE_CHAIN = false;
var CANCEL_FORMAT_CHAIN = false;

var helpField_currentFields = new Array();

function activateField(event)
{
	var field = event.target;

	// dont handle if this field is calculated
	if (field.readonly || field.type == "button")
		return;

	IGNORE_FORMAT_EVENT = true;
	event.target.fillColor = fields[field.name]["focusColor"];
	IGNORE_FORMAT_EVENT = false;
	
	if(fields[field.name]["helpText"] != undefined && fields[field.name]["helpText"] != "")
	{
		showHelp(field);
	}
}

function showHelp(field)
{
	var helpField = this.getField("help" + (field.page+1));
	helpField.value = fields[field.name]["helpText"];
	helpField_currentFields[field.page+1] = field;
	
	if(fields[field.name]["helpWidth"] == undefined)
	{
		fields[field.name]["helpWidth"] = 170;
	}
	
	if(fields[field.name]["helpHeight"] == undefined)
	{
		fields[field.name]["helpHeight"] = 13;
	}
	
	if (fields[field.name]["helpAutoSize"] != undefined)
	{
		var pos = 0;
		if (fields[field.name]["helpPosition"] != undefined)
		{
			pos = fields[field.name]["helpPosition"];
		}
		
		if (fields[field.name]["helpAutoSize"] == true)
		{
			if (pos == 0 || pos == 3)
			{
				fields[field.name]["helpWidth"] = fields[field.name]["width"];
			}
			else
			{
				fields[field.name]["helpHeight"] = fields[field.name]["height"];
			}
		}
	}
	
	if(fields[field.name]["helpPosition"] != undefined)
	{
		var pos = fields[field.name]["helpPosition"];
		
		if(pos == 0)
		{
			showHelpBottom(field, helpField);
			return;
		}
		
		if(pos == 1)
		{
			showHelpRight(field, helpField);
			return;
		}
		
		if(pos == 2)
		{
			showHelpLeft(field, helpField);
			return;
		}
		
		if(pos == 3)
		{
			showHelpTop(field, helpField);
			return;
		}
	}
	else
	{
		showHelpBottom(field, helpField);
	}		
}

function showHelpRight(field, helpField)
{
	ignoreAllEvents = true;
	helpField.rect = [field.rect[2], field.rect[1], field.rect[2] + (fields[field.name]["helpWidth"]), field.rect[1] - (fields[field.name]["helpHeight"])];
	helpField.display = display.noPrint;
	ignoreAllEvents = false;
}

function showHelpLeft(field, helpField)
{
	ignoreAllEvents = true;
	helpField.rect = [field.rect[0] - (fields[field.name]["helpWidth"]), field.rect[1], field.rect[0], field.rect[1] - (fields[field.name]["helpHeight"])];
	helpField.display = display.noPrint;
	ignoreAllEvents = false;
}

function showHelpTop(field, helpField)
{
	ignoreAllEvents = true;
	helpField.rect = [field.rect[0], field.rect[1] + (fields[field.name]["helpHeight"]), field.rect[0] + (fields[field.name]["helpWidth"]), field.rect[1]];
	helpField.display = display.noPrint;
	ignoreAllEvents = false;
}

function showHelpBottom(field, helpField)
{
	ignoreAllEvents = true;
	helpField.rect = [field.rect[0], field.rect[3], field.rect[0] + (fields[field.name]["helpWidth"]), field.rect[3] - (fields[field.name]["helpHeight"])];
	helpField.display = display.noPrint;
	ignoreAllEvents = false;
}

function deactivateField(event)
{
	var field = event.target;

	// dont handle if this field is calculated
	if (field.readonly || field.type == "button")
		return;
	
	field.fillColor = fields[field.name]["backgroundColor"];
	
	var helpField = this.getField("help" + (field.page+1));
	if(helpField != undefined && (helpField_currentFields[field.page+1] == field || IN_INIT))
	{
		helpField_currentFields[field.page+1] = undefined;
		helpField.display = display.hidden;
	}
}

function root_format(event)
{
	var field = event.target;
	var fieldName = field.name;
	
	if (submitForm_formatingBack == true && fields[fieldName]["_cached"] != undefined)
	{
		event.value = fields[fieldName]["_cached"];
		CANCEL_FORMAT_CHAIN = true;
	}
	else
		CANCEL_FORMAT_CHAIN = false;
}

function root_validate(event)
{
	if (submitForm_formatingBack == true && fields[event.target.name]["_cached"] != undefined)
	{
		CANCEL_VALIDATE_CHAIN = true;
	}
	else
	{
		root_cut(event);
		CANCEL_VALIDATE_CHAIN = false;
	}
}

function root_cut(event)
{
	if (event.target.readonly)
	{
		if (event.alreadyCutted == true || submitForm_formatingBack == true) return;
		
		var value = "" + event.value;
		if (fields[event.target.name]["maxChars"] != undefined && fields[event.target.name]["maxChars"] != 0)
		{
			if (value.length > fields[event.target.name]["maxChars"])
			{
				value = value.substr(0, fields[event.target.name]["maxChars"]);
				event.value = value;
			}
		}
		
		event.alreadyCutted = true;
	}
}
function textField_validate(event, overrideValue, overrideIsEmpty)
{
	root_validate(event);
	if (CANCEL_VALIDATE_CHAIN) return;
		
	var field = event.target;
	var fieldName = field.name;
	var value = "" + event.value;
	
	if (overrideValue != undefined)
		value = overrideValue;
	
	var isEmpty = value.trim() == "";
	if (overrideIsEmpty)
		isEmpty = overrideIsEmpty;
		
	if(isEmpty)
	{
		fields[field.name]["validity"] = VALID;
		fields[field.name]["_empty"] = true;
		validation_validate(event);
	}
	else
	{
		fields[field.name]["_empty"] = false;
		if(fields[field.name]["validatePattern"] != undefined)
		{
			var regexp = new RegExp();
			regexp.compile(fields[field.name]["validatePattern"]);
			var valid = regexp.test(value);
			if(valid) fields[field.name]["validity"] = VALID;
			else
			{
				fields[fieldName]["_invalidityReason"] = INVALIDITY_REASON_INPUT;
				fields[field.name]["validity"] = INVALID;
				return;	
			}
		}
		else
		{
			fields[field.name]["validity"] = VALID;
		}
		
		validation_validate(event);
	}
	
	if (field.readonly)
	{
		if (fields[fieldName]["validatePattern"] != undefined && fields[fieldName]["validatePattern"] != "" && fields[fieldName]["formatPattern"] != undefined && fields[fieldName]["formatPattern"] != "")
		{
			var val = value;
			var regExp = new RegExp(fields[fieldName]["validatePattern"], "");
			event.value = ("" + val).replace(regExp, fields[fieldName]["formatPattern"]);
		}
	}
}

function textField_keystroke(event)
{
	var field = event.target;
	var fieldName = field.name;
	
	if(event.willCommit == false && fields[fieldName]["keystrokePattern"] != undefined)
	{
		var valid = false;
		var regexp = new RegExp();
		regexp.compile(fields[fieldName]["keystrokePattern"]);
		valid = regexp.test(mergeChange(event));

		if(!valid)
		{
			app.beep();
			event.rc = false;
		}
	}
	else if(event.willCommit == true && fields[fieldName]["keystrokeCommitPattern"] != undefined)
	{
		var valid = false;
		var regexp = new RegExp();
		regexp.compile(fields[fieldName]["keystrokeCommitPattern"]);
		valid = regexp.test(mergeChange(event));

		if(!valid)
		{
			app.beep();
			event.rc = false;
		}
	}
}

function textField_focus(event)
{
	activateField(event);

	var field = event.target;
	var fieldName = field.name;

	if (fields[fieldName]["nullText"] != undefined && fields[fieldName]["nullTextFont"] != undefined && fields[fieldName]["nullTextFontColor"] != undefined && fields[fieldName]["nullTextFontSize"] != undefined && fields[fieldName]["nullTextAlignment"] != undefined)
	{
		if (fields[fieldName]["nullText"] != "")
		{
			var font = fields[fieldName]["font"];
			var fontSize = fields[fieldName]["fontSize"];
			var fontColor = fields[fieldName]["fontColor"];
			var alignment = fields[fieldName]["alignment"];
			IGNORE_FORMAT_EVENT = true;
			textField_setNewFont(field, font, fontSize, fontColor, alignment);
			IGNORE_FORMAT_EVENT = false;
		}
	}
}

function textField_deactivateField(event)
{
	IGNORE_FORMAT_EVENT = true;
	deactivateField(event);
	IGNORE_FORMAT_EVENT = false;
	
	var field = event.target;
	
	if(field.readonly == false)
	{
		if(fields[field.name]["validity"] != undefined)
		{
			var validity = fields[field.name]["validity"];
			
			if(fields[field.name]["_empty"] == true && (fields[field.name]["validateBehaviorIfEmpty"] == undefined || fields[field.name]["validateBehaviorIfEmpty"] == false))
			{
				if(fields[field.name]["required"] == true)
				{
					field.fillColor = fields[field.name]["requiredColor"];
				}
				else
				{
					field.fillColor = fields[field.name]["emptyColor"];
				}
			}
			else if(validity == VALID) field.fillColor = fields[field.name]["okColor"];
			else if(validity == INVALID) field.fillColor = fields[field.name]["invalidColor"];
		}
		else
		{
			field.fillColor = fields[field.name]["backgroundColor"];
		}
	}
}

function textField_format(event)
{
	root_format(event);
	if (CANCEL_FORMAT_CHAIN) return;
	
	var field = event.target;
	var fieldName = field.name;
		
	if (field.readonly || (fields[fieldName]["validity"] == INVALID && fields[field.name]["_invalidityReason"] == INVALIDITY_REASON_INPUT))
	{
		CANCEL_FORMAT_CHAIN = true;
		return;
	}
		
	// handle null text
	if (textField_handleNulltext(field, fieldName) == true) return;
	
	if (fields[fieldName]["validatePattern"] != undefined && fields[fieldName]["validatePattern"] != "" && fields[fieldName]["formatPattern"] != undefined && fields[fieldName]["formatPattern"] != "")
	{
		var val = event.target.value;
		var regExp = new RegExp(fields[fieldName]["validatePattern"], "");
		event.value = ("" + val).replace(regExp, fields[fieldName]["formatPattern"]);
	}
}

function textField_handleNulltext(field, fieldName)
{
	if (fields[fieldName]["nullText"] != undefined && fields[fieldName]["nullTextFont"] != undefined && fields[fieldName]["nullTextFontColor"] != undefined && fields[fieldName]["nullTextFontSize"] != undefined && fields[fieldName]["nullTextAlignment"] != undefined)
	{	
		if (fields[fieldName]["_empty"] == true && fields[fieldName]["nullText"] != "")
		{
			var font = fields[fieldName]["nullTextFont"];
			var fontSize = fields[fieldName]["nullTextFontSize"];
			var fontColor = fields[fieldName]["nullTextFontColor"];
			var alignment = fields[fieldName]["nullTextAlignment"];
			if (alignment == "auto") alignment = fields[fieldName]["alignment"];
			
			IGNORE_FORMAT_EVENT = true;
			textField_setNewFont(field, font, fontSize, fontColor, alignment);
			IGNORE_FORMAT_EVENT = false;
			
			event.value = fields[fieldName]["nullText"];
			CANCEL_FORMAT_CHAIN = true;
			return true;
		}
		else if (fields[fieldName]["nullText"] != "")
		{
			var font = fields[fieldName]["font"];
			var fontSize = fields[fieldName]["fontSize"];
			var fontColor = fields[fieldName]["fontColor"];
			var alignment = fields[fieldName]["alignment"];
			
			IGNORE_FORMAT_EVENT = true;
			textField_setNewFont(field, font, fontSize, fontColor, alignment);
			IGNORE_FORMAT_EVENT = false;
		}
	}
	
	return false;
}

function textField_setNewFont(field, font, fontSize, fontColor, alignment)
{
	field.textFont = font;
	field.textSize = fontSize;
	field.textColor = fontColor;
	if (field.type == "text")
		field.alignment = alignment;
	
}

/*function textField_convertFontName(name)
{
	switch (name)
	{
		case "Times-Roman":
			return "font.Times";
		case "Times-Bold":
			return "font.TimesB";
		case "Times-Italic":
			return "font.TimesI";
		case "Times-BoldItalic":
			return "font.TimesBI";
		case "Helvetica":
			return "font.Helv";
		case "Helvetica-Bold":
			return "font.HelvB";
		case "Helvetica-Oblique":
			return "font.HelvI";
		case "Helvetica-BoldOblique":
			return "font.HelvBI";
		case "Courier":
			return "font.Cour";
		case "Courier-Bold":
			return "font.CourB";
		case "Courier-Oblique":
			return "font.CourI";
		case "Courier-BoldOblique":
			return "font.CourBI";
		case "Symbol":
			return "font.Symbol";
		case "ZapfDingbats":
			return "font.ZapfD";
		default:
			return name;
	}
}*/

function mergeChange(event)
{
	var prefix, postfix;
	var value = event.value;

	if(event.willCommit) return event.value;
	if(event.selStart >= 0) prefix = value.substring(0, event.selStart);
	else prefix = "";

	if(event.selEnd >= 0 && event.selEnd <= value.length) postfix = value.substring(event.selEnd, value.length);
	else postfix = "";

	return prefix + event.change + postfix;
}var map3of9 = new Array();

map3of9["a"] = new Array(1,0,0,0,0,1,0,0,1);
map3of9["b"] = new Array(0,0,1,0,0,1,0,0,1);
map3of9["c"] = new Array(1,0,1,0,0,1,0,0,0);
map3of9["d"] = new Array(0,0,0,0,1,1,0,0,1);
map3of9["e"] = new Array(1,0,0,0,1,1,0,0,0);
map3of9["f"] = new Array(0,0,1,0,1,1,0,0,0);
map3of9["g"] = new Array(0,0,0,0,0,1,1,0,1);
map3of9["h"] = new Array(1,0,0,0,0,1,1,0,0);
map3of9["i"] = new Array(0,0,1,0,0,1,1,0,0);
map3of9["j"] = new Array(0,0,0,0,1,1,1,0,0);
map3of9["k"] = new Array(1,0,0,0,0,0,0,1,1);
map3of9["l"] = new Array(0,0,1,0,0,0,0,1,1);
map3of9["m"] = new Array(1,0,1,0,0,0,0,1,0);
map3of9["n"] = new Array(0,0,0,0,1,0,0,1,1);
map3of9["o"] = new Array(1,0,0,0,1,0,0,1,0);
map3of9["p"] = new Array(0,0,1,0,1,0,0,1,0);
map3of9["q"] = new Array(0,0,0,0,0,0,1,1,1);
map3of9["r"] = new Array(1,0,0,0,0,0,1,1,0);
map3of9["s"] = new Array(0,0,1,0,0,0,1,1,0);
map3of9["t"] = new Array(0,0,0,0,1,0,1,1,0);
map3of9["u"] = new Array(1,1,0,0,0,0,0,0,1);
map3of9["v"] = new Array(0,1,1,0,0,0,0,0,1);
map3of9["w"] = new Array(1,1,1,0,0,0,0,0,0);
map3of9["x"] = new Array(0,1,0,0,1,0,0,0,1);
map3of9["y"] = new Array(1,1,0,0,1,0,0,0,0);
map3of9["z"] = new Array(0,1,1,0,1,0,0,0,0);
map3of9["0"] = new Array(0,0,0,1,1,0,1,0,0);
map3of9["1"] = new Array(1,0,0,1,0,0,0,0,1);
map3of9["2"] = new Array(0,0,1,1,0,0,0,0,1);
map3of9["3"] = new Array(1,0,1,1,0,0,0,0,0);
map3of9["4"] = new Array(0,0,0,1,1,0,0,0,1);
map3of9["5"] = new Array(1,0,0,1,1,0,0,0,0);
map3of9["6"] = new Array(0,0,1,1,1,0,0,0,0);
map3of9["7"] = new Array(0,0,0,1,0,0,1,0,1);
map3of9["8"] = new Array(1,0,0,1,0,0,1,0,0);
map3of9["9"] = new Array(0,0,1,1,0,0,1,0,0);
map3of9["="] = new Array(0,1,1,0,0,0,1,0,0);
map3of9["_"] = new Array(0,1,0,0,0,0,1,0,1);
map3of9["-"] = new Array(0,1,0,0,0,0,1,0,1);
map3of9["*"] = new Array(0,1,0,0,1,0,1,0,0);
map3of9["/"] = new Array(0,1,0,1,0,0,0,1,0);
map3of9["."] = new Array(1,1,0,0,0,0,1,0,0);
map3of9["$"] = new Array(0,1,0,1,0,1,0,0,0);
map3of9["%"] = new Array(0,0,0,1,0,1,0,1,0);
map3of9["+"] = new Array(0,1,0,0,0,1,0,1,0);
map3of9[" "] = new Array(0,1,1,0,0,0,1,0,0);

function makeCode39(event)
{
	if(event.value != "")
	{
    var field = event.target;

		fields[field.name]["validity"] = EMPTY;
    var val = "*" + event.value.toLowerCase() + "*";
    
    var bh = fields[field.name]["symbolHeight"];
    var bw = fields[field.name]["symbolWidth"];
    
    var i = 0;
    var xpos = 0;
    var end = 0;
    var color = 0;
    var pdf = "";
    pdf += "0 0 0 rg ";

    for(i = 0; i < val.length; i++)
    {
    	if(map3of9[val.charAt(i)] != undefined)
    	{
	var bars = map3of9[val.charAt(i)];
	var sss = 1;
	
	for(var j = 0; j < bars.length; j++)
	{
		var bar = bars[j];
		var w = 0;
		
		if(bar == 0)
		{
			end = xpos + (bw/15);
			w = bw/15-(bw/15/6.25);
		}
		else
		{
			 end = xpos + bw/5;
			 w = bw/5-(bw/15/6.25);
		}
		
		if(sss == 1)
		{
			var bxpos = xpos + (bw/15/12.5);
			var bend = end; - (bw/15/12.5);
			pdf += bxpos + " 0 " + w + " " + bh + " re F ";
		}

		xpos = end;
		
		if(sss == 1)
		{
			sss = 0;
		}
		else
		{
			sss = 1;
		}
	}
	
	xpos += (bw/15);
}
    }

    var icon = createIcon(pdf, (val.length * bw) + (val.length * (bw/15)) - (bw/15), bh);
    this.getField(event.target.name.replace("edit", "barcode")).buttonSetIcon(icon);
    
  }
  else
  {
  		var icon = createIcon("", 1,1);
    this.getField(event.target.name.replace("edit", "barcode")).buttonSetIcon(icon);
  }
}function validation_validate(event)
{
	root_validate(event);
	if (CANCEL_VALIDATE_CHAIN) return;
	
	var field = event.target;
	var fieldName = field.name;
	
	if (fields[fieldName]["_empty"] == true && (fields[fieldName]["validateBehaviorIfEmpty"] == undefined || fields[fieldName]["validateBehaviorIfEmpty"] == false))
	{
		return;
	}
	
	if(fields[field.name]["validation"] != undefined && fields[field.name]["validation"] != "")
	{
		inValidate = true;
		validateEvent = event;
		var expression = fields[field.name]["validation"];
		
		CANCEL_CALCULATION = false;
		CALCULATE_RULES = false;
		CALCULATION_ONE_FILLED = false;
		CALCULATION_ALL_FILLED = true;
		CALCULATION_WITH_FIELD = false;
	
		var valid = Boolean(expression());
		
		inValidate = false;
		validateEvent = undefined;
		
		if (CANCEL_CALCULATION && fields[field.name]["validateBehaviorStandard"] != undefined)
			valid = fields[field.name]["validateBehaviorStandard"];
		else if (CALCULATION_WITH_FIELD)
		{
			// handle behavior if empty fields
			if (fields[field.name]["validateBehavior"] == 0)
			{
				if (CALCULATION_ALL_FILLED == false)
				{
					valid = fields[field.name]["validateBehaviorStandard"];
				}
			}
			else if (fields[field.name]["validateBehavior"] == 1)
			{
				if (CALCULATION_ONE_FILLED == false)
				{
					valid = fields[field.name]["validateBehaviorStandard"];
				}
			}
		}
		
		if(valid)
		{
			fields[field.name]["validity"] = VALID;
		}
		else
		{
			fields[field.name]["_invalidityReason"] = INVALIDITY_REASON_OTHER;
			fields[field.name]["validity"] = INVALID;
		}
	}
}
javascript_obj0075_025.js pdf-javascript-stream PDF /JS object 75 at offset 0x1B3B5 26599 bytes
SHA-256: 92b7e8047d7db76b49f4b17cafb0874db7de5823f779184a767eb82d602c3560
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 1 long base64-like blob(s).
Preview script
First 1,000 lines of the extracted script
var dmArray = new Array();var f;var fields = new Array();
var rules=[];f={buttonAlignY:50.0,borderStyle:2,fontColor:[ "RGB", 0.0, 0.21960784, 0.40784314 ],buttonScaleWhen:1,buttonAlignX:50.0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],backgroundColor:[ "RGB", 0.8666667, 0.89411765, 0.9137255 ],okColor:[ "RGB", 1.0, 1.0, 1.0 ],helpWidth:226.77165,buttonFitToBounds:false,invalidColor:[ "RGB", 1.0, 1.0, 1.0 ],height:17.007874,rotation:0,resetBehaviorMessage:"Realmente desea restablecer el formulario?",required:false,resetBehavior:true,resetBehaviorTitle:"Restablecer",fieldType:"button",font:"Helvetica-Bold",width:113.385826,display:2,helpText:"",fontSize:10.0,expressionBehavior:2,requiredColor:[ "RGB", 1.0, 1.0, 1.0 ],buttonPosition:1,helpHeight:13.0,readOnly:false,buttonCaption:"Borrar los datos",focusColor:[ "RGB", 1.0, 1.0, 1.0 ],emptyColor:[ "RGB", 1.0, 1.0, 1.0 ],borderWidth:1,buttonScaleHow:true,fieldCaption:"",helpPosition:0,y:75.12106,helpAutoSize:false,x:90.68208,id:1,fieldSchemaId:"__resetForm",rules:[],validations:[]};fields["swissforms.resetForm1.edit"] = f;
registerEvent("Blur", "swissforms.resetForm1.edit", function(event){deactivateField(event);});
registerEvent("Format", "swissforms.resetForm1.edit", function(event){root_format(event);});
registerEvent("Focus", "swissforms.resetForm1.edit", function(event){activateField(event);});
registerEvent("Validate", "swissforms.resetForm1.edit", function(event){root_validate(event);});
registerEvent("Mouse Up", "swissforms.resetForm1.edit", function(event){resetForm_reset(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173234,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:445.03937,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:180.8237,helpAutoSize:false,x:90.68208,id:4,fieldSchemaId:"CS_Name",rules:[],validations:[]};fields["swissforms.Name1.edit"] = f;
registerEvent("Blur", "swissforms.Name1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Name1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Name1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Name1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Name1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:215.43307,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:210.83745,helpAutoSize:false,x:90.68208,id:5,fieldSchemaId:"CS_Street",rules:[],validations:[]};fields["swissforms.Street1.edit"] = f;
registerEvent("Blur", "swissforms.Street1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Street1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Street1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Street1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Street1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:215.43307,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:210.83745,helpAutoSize:false,x:320.28836,id:6,fieldSchemaId:"CS_ZipPlace",rules:[],validations:[]};fields["swissforms.ZipPlace1.edit"] = f;
registerEvent("Blur", "swissforms.ZipPlace1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.ZipPlace1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.ZipPlace1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.ZipPlace1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.ZipPlace1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:215.43307,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:240.08751,helpAutoSize:false,x:90.6821,id:7,fieldSchemaId:"CS_Country",rules:[],validations:[]};fields["swissforms.Country1.edit"] = f;
registerEvent("Blur", "swissforms.Country1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Country1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Country1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Country1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Country1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:22,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173234,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:214.66931,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"^[0-9-]{1,22}$",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"^[0-9-]{0,22}$",fieldCaption:"",y:240.08751,helpAutoSize:false,x:320.28836,id:2,fieldSchemaId:"CS_Depot",rules:[],validations:[]};fields["swissforms.Depot1.edit"] = f;
registerEvent("Blur", "swissforms.Depot1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Depot1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Depot1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Depot1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Depot1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173218,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:305.50058,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:436.9639,helpAutoSize:false,x:230.22086,id:8,fieldSchemaId:"CS_Country",rules:[],validations:[]};fields["swissforms.Country2.edit"] = f;
registerEvent("Blur", "swissforms.Country2.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Country2.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Country2.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Country2.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Country2.edit", function(event){textField_keystroke(event);});
f={borderStyle:0,fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderColor:[ "RGB", 0.0, 0.0, 0.0 ],backgroundColor:[ "T" ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],cbMode:0,height:8.503937,validateBehaviorIfEmpty:false,rotation:0,checkSymbol:3,required:false,cbGroup:"1",validation:function(){return true;},fieldType:"checkbox",font:"Helvetica",width:8.503937,validateBehaviorStandard:false,display:0,helpText:"",fontSize:6.0,validateBehavior:2,expressionBehavior:2,requiredColor:[ "RGB", 1.0, 0.8117647, 0.7490196 ],helpHeight:13.0,readOnly:false,focusColor:[ "RGB", 1.0, 1.0, 0.0 ],borderWidth:0,emptyColor:[ "RGB", 0.7490196, 0.77254903, 1.0 ],fieldCaption:"",helpPosition:0,checked:false,y:500.95612,helpAutoSize:false,exportValue:"yes",x:92.5293,id:9,fieldSchemaId:"CS_Box",rules:[],validations:[]};fields["swissforms.Box1.edit"] = f;
registerEvent("Blur", "swissforms.Box1.edit", function(event){checkbox_deactivate(event);});
registerEvent("Format", "swissforms.Box1.edit", function(event){root_format(event);});
registerEvent("Focus", "swissforms.Box1.edit", function(event){activateField(event);});
registerEvent("Validate", "swissforms.Box1.edit", function(event){ checkbox_validate(event);});
f={borderStyle:0,fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderColor:[ "RGB", 0.0, 0.0, 0.0 ],backgroundColor:[ "T" ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],cbMode:0,height:8.503937,validateBehaviorIfEmpty:false,rotation:0,checkSymbol:3,required:false,cbGroup:"1",validation:function(){return true;},fieldType:"checkbox",font:"Helvetica",width:8.503937,validateBehaviorStandard:false,display:0,helpText:"",fontSize:6.0,validateBehavior:2,expressionBehavior:2,requiredColor:[ "RGB", 1.0, 0.8117647, 0.7490196 ],helpHeight:13.0,readOnly:false,focusColor:[ "RGB", 1.0, 1.0, 0.0 ],borderWidth:0,emptyColor:[ "RGB", 0.7490196, 0.77254903, 1.0 ],fieldCaption:"",helpPosition:0,checked:false,y:500.95612,helpAutoSize:false,exportValue:"yes",x:149.14572,id:10,fieldSchemaId:"CS_Box",rules:[],validations:[]};fields["swissforms.Box2.edit"] = f;
registerEvent("Blur", "swissforms.Box2.edit", function(event){checkbox_deactivate(event);});
registerEvent("Format", "swissforms.Box2.edit", function(event){root_format(event);});
registerEvent("Focus", "swissforms.Box2.edit", function(event){activateField(event);});
registerEvent("Validate", "swissforms.Box2.edit", function(event){ checkbox_validate(event);});
f={expression:function(){ return _concat(_concat(_substr(_format_time(_now(), "HH:mm:ss"), 0, 2), _substr(_format_time(_now(), "HH:mm:ss"), 3, 2)), _substr(_format_time(_now(), "HH:mm:ss"), 6, 2))},autoScroll:false,backgroundColor:[ "T" ],maxChars:6,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:31.181103,fileSelection:false,display:0,fontSize:9.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:true,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:757.8588,helpAutoSize:false,x:97.069916,id:12,fieldSchemaId:"CS_Time",rules:[],validations:[]};fields["swissforms.Time1.edit"] = f;
registerEvent("Blur", "swissforms.Time1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.Time1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.Time1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.Time1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.Time1.edit", function(event){textField_keystroke(event);});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:22,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:127.55905,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"^[0-9-]{1,22}$",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"^[0-9-]{0,22}$",fieldCaption:"",y:757.8588,helpAutoSize:false,x:207.6964,id:13,fieldSchemaId:"CS_CifNr",rules:[],validations:[]};fields["swissforms.CifNr1.edit"] = f;
registerEvent("Blur", "swissforms.CifNr1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.CifNr1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.CifNr1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.CifNr1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.CifNr1.edit", function(event){textField_keystroke(event);});
f={expression:function(){ return fieldValue(13)},alignment:"left",borderStyle:0,fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderColor:[ "RGB", 0.0, 0.0, 0.0 ],autoScroll:false,backgroundColor:[ "T" ],maxChars:0,okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,symbolHeight:19.417322,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],spellCheck:false,height:21.259827,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",symbolWidth:9.637795,validation:function(){return true;},fieldType:"barcode",font:"Helvetica",width:202.20854,fileSelection:false,validateBehaviorStandard:false,display:0,helpText:"",fontSize:10.0,comb:false,validateBehavior:2,expressionBehavior:2,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],helpHeight:13.0,readOnly:true,focusColor:[ "RGB", 1.0, 1.0, 0.0 ],multiline:false,borderWidth:0,emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],fieldCaption:"",helpPosition:0,y:788.0315,helpAutoSize:false,x:90.708664,id:14,fieldSchemaId:"__code39",rules:[],validations:[]};fields["swissforms.Code391.edit"] = f;
registerEvent("Blur", "swissforms.Code391.edit", function(event){deactivateField(event);});
registerEvent("Format", "swissforms.Code391.edit", function(event){root_format(event);});
registerEvent("Focus", "swissforms.Code391.edit", function(event){activateField(event);});
registerEvent("Validate", "swissforms.Code391.edit", function(event){makeCode39(event)});
f={expression:function(){ return "A111Z09062"},alignment:"left",borderStyle:0,fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderColor:[ "RGB", 0.0, 0.0, 0.0 ],autoScroll:false,backgroundColor:[ "T" ],maxChars:0,okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,symbolHeight:19.417322,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],spellCheck:false,height:21.259842,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",symbolWidth:9.637795,validation:function(){return true;},fieldType:"barcode",font:"Helvetica",width:215.43307,fileSelection:false,validateBehaviorStandard:false,display:0,helpText:"",fontSize:10.0,comb:false,validateBehavior:2,expressionBehavior:2,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],helpHeight:13.0,readOnly:true,focusColor:[ "RGB", 1.0, 1.0, 0.0 ],multiline:false,borderWidth:0,emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],fieldCaption:"",helpPosition:0,y:788.0315,helpAutoSize:false,x:297.6378,id:15,fieldSchemaId:"__code39",rules:[],validations:[]};fields["swissforms.Code392.edit"] = f;
registerEvent("Blur", "swissforms.Code392.edit", function(event){deactivateField(event);});
registerEvent("Format", "swissforms.Code392.edit", function(event){root_format(event);});
registerEvent("Focus", "swissforms.Code392.edit", function(event){activateField(event);});
registerEvent("Validate", "swissforms.Code392.edit", function(event){makeCode39(event)});
f={autoScroll:false,backgroundColor:[ "T" ],maxChars:0,nullTextFontColor:[ "RGB", 0.0, 0.0, 0.0 ],keystrokeCommitPattern:"",spellCheck:false,height:14.173228,validateBehaviorIfEmpty:false,rotation:0,required:false,defaultValue:"",font:"Helvetica",width:215.43307,fileSelection:false,display:0,fontSize:10.0,helpHeight:13.0,multiline:false,borderWidth:0,helpPosition:0,nullTextFont:"Helvetica",nullText:"",alignment:"left",fontColor:[ "RGB", 0.0, 0.0, 0.0 ],borderStyle:0,borderColor:[ "RGB", 0.0, 0.0, 0.0 ],okColor:[ "RGB", 0.8235294, 0.98039216, 0.8235294 ],helpWidth:215.43307,invalidColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],formatPattern:"",nullTextAlignment:"auto",validation:function(){return true;},fieldType:"text",validateBehaviorStandard:false,helpText:"",comb:false,validateBehavior:2,expressionBehavior:2,validatePattern:"",nullTextFontSize:9.0,requiredColor:[ "RGB", 1.0, 0.8235294, 0.8235294 ],readOnly:false,formatOutputPattern:"",focusColor:[ "RGB", 1.0, 1.0, 0.0 ],emptyColor:[ "RGB", 0.84313726, 0.92156863, 0.9411765 ],keystrokePattern:"",fieldCaption:"",y:642.2599,helpAutoSize:false,x:89.9183,id:11,fieldSchemaId:"CS_OrtDat",rules:[],validations:[]};fields["swissforms.OrtDat1.edit"] = f;
registerEvent("Blur", "swissforms.OrtDat1.edit", function(event){textField_deactivateField(event);});
registerEvent("Format", "swissforms.OrtDat1.edit", function(event){textField_format(event);});
registerEvent("Focus", "swissforms.OrtDat1.edit", function(event){textField_focus(event);});
registerEvent("Validate", "swissforms.OrtDat1.edit", function(event){ textField_validate(event);});
registerEvent("Keystroke", "swissforms.OrtDat1.edit", function(event){textField_keystroke(event);});


var tabOrder = new Array();


var tabOrderB = new Array();
tabOrder["swissforms.resetForm1.edit"] = "swissforms.Name1.edit";
tabOrderB["swissforms.resetForm1.edit"] = "swissforms.OrtDat1.edit";
tabOrder["swissforms.Name1.edit"] = "swissforms.Street1.edit";
tabOrderB["swissforms.Name1.edit"] = "swissforms.resetForm1.edit";
tabOrder["swissforms.Street1.edit"] = "swissforms.ZipPlace1.edit";
tabOrderB["swissforms.Street1.edit"] = "swissforms.Name1.edit";
tabOrder["swissforms.ZipPlace1.edit"] = "swissforms.Country1.edit";
tabOrderB["swissforms.ZipPlace1.edit"] = "swissforms.Street1.edit";
tabOrder["swissforms.Country1.edit"] = "swissforms.Depot1.edit";
tabOrderB["swissforms.Country1.edit"] = "swissforms.ZipPlace1.edit";
tabOrder["swissforms.Depot1.edit"] = "swissforms.Country2.edit";
tabOrderB["swissforms.Depot1.edit"] = "swissforms.Country1.edit";
tabOrder["swissforms.Country2.edit"] = "swissforms.Box1.edit";
tabOrderB["swissforms.Country2.edit"] = "swissforms.Depot1.edit";
tabOrder["swissforms.Box1.edit"] = "swissforms.Box2.edit";
tabOrderB["swissforms.Box1.edit"] = "swissforms.Country2.edit";
tabOrder["swissforms.Box2.edit"] = "swissforms.Time1.edit";
tabOrderB["swissforms.Box2.edit"] = "swissforms.Box1.edit";
tabOrder["swissforms.Time1.edit"] = "swissforms.CifNr1.edit";
tabOrderB["swissforms.Time1.edit"] = "swissforms.Box2.edit";
tabOrder["swissforms.CifNr1.edit"] = "swissforms.Code391.edit";
tabOrderB["swissforms.CifNr1.edit"] = "swissforms.Time1.edit";
tabOrder["swissforms.Code391.edit"] = "swissforms.Code392.edit";
tabOrderB["swissforms.Code391.edit"] = "swissforms.CifNr1.edit";
tabOrder["swissforms.Code392.edit"] = "swissforms.OrtDat1.edit";
tabOrderB["swissforms.Code392.edit"] = "swissforms.Code391.edit";
tabOrder["swissforms.OrtDat1.edit"] = "swissforms.resetForm1.edit";
tabOrderB["swissforms.OrtDat1.edit"] = "swissforms.Code392.edit";
var formProperties = new Object();
formProperties["rsaKeyEncryptionExponent"] = "10001";
formProperties["rsaKeyModulus"] = "daf88304d519ed47ece18e0a55fe4a943b54b2c0fc47db740277d3d0b952d4e9256f30312490c920e1e65d3b8dbc0297efeab4d9b75f63f56268266b04fca12368ade78735c80303b7677f18bd839846568d216254c58ceeba43e831194b6faf7b443b7370317b76c692dfe7e16868833884676497a6168f2834e82aa7705d6f";
formProperties["formId"] = 503;
formProperties["version"] = 3.0;
formProperties["locale"] = "es-ES";
formProperties["serverPort"] = "8443";
formProperties["serverHost"] = "127.0.0.1";
formProperties["submitServlet"] = "/swissforms/capture";
formProperties["pingServlet"] = "/swissforms/capturePing";
formProperties["websaveServlet"] = "/swissforms/websave";
formProperties["firstField"] = "swissforms.resetForm1.edit";
formProperties["alwaysAllowPrint"] = true;
formProperties["printShowMessage"] = false;
formProperties["printShowHiddenField"] = false;
formProperties["printGenerateDataMatrix"] = false;
formProperties["printHiddenField"] = "";
formProperties["printShowMessageText"] = "";
formProperties["submitTime"] = "";
formProperties["referenceId"] = "";
var fieldIdNameMapping={"1":"swissforms.resetForm1.edit","4":"swissforms.Name1.edit","5":"swissforms.Street1.edit","6":"swissforms.ZipPlace1.edit","7":"swissforms.Country1.edit","2":"swissforms.Depot1.edit","8":"swissforms.Country2.edit","9":"swissforms.Box1.edit","10":"swissforms.Box2.edit","12":"swissforms.Time1.edit","13":"swissforms.CifNr1.edit","14":"swissforms.Code391.edit","15":"swissforms.Code392.edit","11":"swissforms.OrtDat1.edit"};
var openCalcOrderList=[1,2,4,5,6,7,8,9,10,11,12,13,14,15];
var flatCalcTree=[{"fieldId":1,"next":-1},{"fieldId":2,"next":-1},{"fieldId":4,"next":-1},{"fieldId":5,"next":-1},{"fieldId":6,"next":-1},{"fieldId":7,"next":-1},{"fieldId":8,"next":-1},{"fieldId":9,"next":-1},{"fieldId":10,"next":-1},{"fieldId":11,"next":-1},{"fieldId":12,"next":-1},{"fieldId":14,"next":-1},{"fieldId":13,"next":11},{"fieldId":15,"next":-1}];
var calcTreeEntryMapping={"1":0,"2":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"11":9,"12":10,"13":12,"15":13};
javascriptsLoaded();var submitAsHTML = false;
deobfuscated.js deobfuscated-js PDF JavaScript deobfuscation pass 2129495 bytes
SHA-256: 75614d8420db360730b701caf0509f3e5c4c84c81584ef0f5b8ec04c1567089c
Detection
ClamAV: No threats found
Obfuscation or payload: likely
Carved artifact contains 14 eval/decoder/string-building token(s). Carved artifact contains 1 long base64-like blob(s).
Preview script
First 1,000 lines of the extracted script
var cldr={
"supplemental_plurals":{
"zero":function(n) { return false; },
"one":function(n) { return n == 1; },
"two":function(n) { return false; },
"few":function(n) { return false; },
"many":function(n) { return false; }
},
"numbers_symbols":{
"decimal":",",
"group":".",
"list":";",
"nativeZeroDigit":"0",
"plusSign":"+",
"minusSign":"-",
"numberPattern":"#,##0.###",
"nan":"NaN",
"infinity":"\u221E"
},
"calendar_gregorian":{
"months_format":{
"abbreviated":{
"_1":"ene","_2":"feb","_3":"mar","_4":"abr","_5":"may","_6":"jun","_7":"jul","_8":"ago","_9":"sep","_10":"oct","_11":"nov","_12":"dic"
},
"wide":{
"_1":"enero","_2":"febrero","_3":"marzo","_4":"abril","_5":"mayo","_6":"junio","_7":"julio","_8":"agosto","_9":"septiembre","_10":"octubre","_11":"noviembre","_12":"diciembre"
},
"narrow":{
"_1":"E","_2":"F","_3":"M","_4":"A","_5":"M","_6":"J","_7":"J","_8":"A","_9":"S","_10":"O","_11":"N","_12":"D"
}
},
"months_stand_alone":{
"abbreviated":{
"_1":"ene","_2":"feb","_3":"mar","_4":"abr","_5":"may","_6":"jun","_7":"jul","_8":"ago","_9":"sep","_10":"oct","_11":"nov","_12":"dic"
},
"wide":{
"_1":"enero","_2":"febrero","_3":"marzo","_4":"abril","_5":"mayo","_6":"junio","_7":"julio","_8":"agosto","_9":"septiembre","_10":"octubre","_11":"noviembre","_12":"diciembre"
},
"narrow":{
"_1":"E","_2":"F","_3":"M","_4":"A","_5":"M","_6":"J","_7":"J","_8":"A","_9":"S","_10":"O","_11":"N","_12":"D"
}
},
"days_format":{
"abbreviated":{
"sun":"dom","mon":"lun","tue":"mar","wed":"mi\u00E9","thu":"jue","fri":"vie","sat":"s\u00E1b"
},
"wide":{
"sun":"domingo","mon":"lunes","tue":"martes","wed":"mi\u00E9rcoles","thu":"jueves","fri":"viernes","sat":"s\u00E1bado"
},
"narrow":{
"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"
}
},
"days_stand_alone":{
"abbreviated":{
"sun":"dom","mon":"lun","tue":"mar","wed":"mi\u00E9","thu":"jue","fri":"vie","sat":"s\u00E1b"
},
"wide":{
"sun":"domingo","mon":"lunes","tue":"martes","wed":"mi\u00E9rcoles","thu":"jueves","fri":"viernes","sat":"s\u00E1bado"
},
"narrow":{
"sun":"D","mon":"L","tue":"M","wed":"M","thu":"J","fri":"V","sat":"S"
}
},
"quarters_format":{
"abbreviated":{
"_1":"T1","_2":"T2","_3":"T3","_4":"T4"
},
"wide":{
"_1":"1er trimestre","_2":"2\u00BA trimestre","_3":"3er trimestre","_4":"4\u00BA trimestre"
},
"narrow":{
"_1":"1","_2":"2","_3":"3","_4":"4"
}
},
"quarters_stand_alone":{
"abbreviated":{
"_1":"T1","_2":"T2","_3":"T3","_4":"T4"
},
"wide":{
"_1":"1er trimestre","_2":"2\u00BA trimestre","_3":"3er trimestre","_4":"4\u00BA trimestre"
},
"narrow":{
"_1":"1","_2":"2","_3":"3","_4":"4"
}
},
"am":"a.m.",
"pm":"p.m.",
"eraNames":{"beforeChrist":"antes de Cristo","afterChrist":"anno D\u00F3mini"},
"eraAbbr":{"beforeChrist":"a.C.","afterChrist":"d.C."},
"eraNarrow":{"beforeChrist":"a.C.","afterChrist":"d.C."},
"relative_days":{
"_0":"hoy","_1":"ma\u00F1ana","_2":"pasado ma\u00F1ana","_-1":"ayer","_-2":"antes de ayer"
},
"months_all":{
"_1":["urtarrila","January","Xaneiro","gener","enero"],"_2":["otsaila","February","Febreiro","febrer","febrero"],"_3":["martxoa","March","Marzo","mar\u00E7","marzo"],"_4":["apirila","April","Abril","abril"],"_5":["maiatza","May","Maio","maig","mayo"],"_6":["ekaina","June","Xu\u00F1o","juny","junio"],"_7":["uztaila","July","Xullo","juliol","julio"],"_8":["abuztua","August","Agosto","agost","agosto"],"_9":["iraila","September","Setembro","setembre","septiembre"],"_10":["urria","October","Outubro","octubre"],"_11":["azaroa","November","Novembro","novembre","noviembre"],"_12":["abendua","December","Decembro","desembre","diciembre"]
},
"days_all":{
"sun":["igandea","Sunday","Domingo","diumenge","domingo"],"mon":["astelehena","Monday","Luns","dilluns","lunes"],"tue":["asteartea","Tuesday","Martes","dimarts","martes"],"wed":["asteazkena","Wednesday","M\u00E9rcores","dimecres","mi\u00E9rcoles"],"thu":["osteguna","Thursday","Xoves","dijous","jueves"],"fri":["ostirala","Friday","Venres","divendres","viernes"],"sat":["larunbata","Saturday","S\u00E1bado","dissabte","s\u00E1bado"]
},
"timeFormats":{
"short":"HH:mm",
"medium":"HH:mm:ss",
},
"dateFormats":{
"short":"dd/MM/yy",
"medium":"dd/MM/yyyy",
"long":"d 'de' MMMM 'de' yyyy",
"full":"EEEE d 'de' MMMM 'de' yyyy",
},
},
"timeZoneNames":{
"hourFormat":"+HH:mm;-HH:mm",
"gmtFormat":"GMT{0}",
},
"numbers_currencyFormats":{
"currencySpacing":{
"beforeCurrency":{
"currencyMatch":"[:letter:]",
"surroundingMatch":"[:digit:]",
"insertBetween":"\u00A0"
},
"afterCurrency":{
"currencyMatch":"[:letter:]",
"surroundingMatch":"[:digit:]",
"insertBetween":"\u00A0"
}
},
"unitPatterns":{
"other":"{0} {1}"

},
"currencyPattern":"\u00A4\u00A0#,##0.00"
},
"numbers_currencies":{
},
"supplemental_currencyData_fractions":{"DEFAULT":{"digits":2,"rounding":0},
}
}
var formProperties = new Array();
var CANCEL_EVENT = false;
var EMPTY = 0;
var VALID = 1;
var INVALID = 2;
var REQUIRED = 3;

var INVALIDITY_REASON_INPUT = 0;
var INVALIDITY_REASON_OTHER = 1;

var commitWithTab = false;
var tabTarget = "";
var nextFieldState = 0;
var tabOn = true;
var eventLevel = 0;
var backward = false;
var prevAcroField = null;
var possibleBackJump = false;
//var nextAcroField = null;
var submitForm_formatingBack = false;
var ignoreAllEvents = false;
var ignoreAllRules = false;
var fieldIdCached = new Array();
var CANCEL_CALCULATION = false;
var CALCULATE_RULES = false;
var CALCULATION_ONE_FILLED = false;
var CALCULATION_ALL_FILLED = false;
var CALCULATION_WITH_FIELD = false;
this.SWISSFORMS_FORM = true;

var openTime;

var IN_INIT = false;

var IGNORE_FORMAT_EVENT = false;

var CACHED_CB_GROUPS = new Array();

var printHiddenFieldOriginalDisplay = undefined;

var calculateCounter = 0;

if(app.runtimeHighlight)
{
	app.runtimeHighlight = false;
}

/// events

var eventRegister = new Object();

function registerEvent(eventName, fieldName, source)
{
	if(eventRegister[eventName] == undefined) eventRegister[eventName] = new Object();
	if(eventRegister[eventName][fieldName] == undefined) eventRegister[eventName][fieldName] = new Array();
	eventRegister[eventName][fieldName].push(source);
}

function handleEvent(event, withRules)
{
	if (ignoreAllEvents)
		return;
	
	var eventName = event.name;
	if (eventName == "Format" && IGNORE_FORMAT_EVENT)
		return;
	
	// optimization: don't blur or format hidden fields
	if ((eventName == "Format" || eventName == "Blur") && event.target != undefined)
	{
		if (event.target.hidden)
			return;
	}
	
	eventLevel++;
	
	/*if (eventName == "Calculate")
		console.println("Enter Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
	else
		console.println("Enter Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
	
	if(eventName == "Keystroke" && event.target != null && event.commitKey == 3 && eventLevel == 1)
	{
		//this.console.println("tab commit: " + event.target.name);

		// look up prev active field
		prevAcroField = tabOrderB[event.target.name];
		var pField = this.getField(prevAcroField);
		while(pField != null && (pField.display == 1 || pField.display == 3 || pField.readonly))
		{
			prevAcroField = tabOrderB[prevAcroField];
			pField = this.getField(prevAcroField);
		}

		/*// look up prev active field
		nextAcroField = tabOrder[event.target.name];
		var nField = this.getField(nextAcroField);
		while(nField != null && (nField.display == 1 || nField.display == 3 || nField.readonly))
		{
			nextAcroField = tabOrder[nextAcroField];
			nField = this.getField(nextAcroField);
		}*/

		commitWithTab = true;
		tabTarget = event.target.name;
		nextFieldState = event.target.display;
	}


	if(eventRegister[eventName] == undefined)
	{
		if(eventName == "Calculate")
		{
			calculateFields(event);
		}
		
		/*if (eventName == "Calculate")
			console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
		else
			console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
			
		eventLevel--;
		return;
	}
	var registeredEvent = eventRegister[eventName];
	if(registeredEvent[event.target.name] == undefined)
	{
		/*if (eventName == "Calculate")
			console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
		else
			console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
			
		eventLevel--;
		return;
	}
	var fieldName = event.target.name;
	CANCEL_EVENT = false;
	for(var i = 0; i < registeredEvent[fieldName].length; i++)
	{
		if(!CANCEL_EVENT)
		{
			registeredEvent[fieldName][i](event);
		}
		else break;
	}

	//if(withRules != 1) doRules(event);

	if(eventName == "Calculate")
	{
		calculateFields(event);
	}

	//////////////// ACHTUNG
	
	if(possibleBackJump && eventName == "Focus" && eventLevel == 1)
	{
		if(event.target.name == prevAcroField)
		{
			var nextFieldName = tabOrderB[tabTarget];

			var name = nextFieldName;
			var field2 = this.getField(name);

			while(field2 != null && (field2.display == 1 || field2.display == 3 || field2.readonly))
			{
				name = tabOrderB[name];
				field2 = this.getField(name);
			}

			field2.setFocus();
		}
	}
	else if(possibleBackJump && eventName == "Blur" && tabTarget == event.target.name && eventLevel == 1)
	{
		;
		// do nothing
	}
	else if(possibleBackJump && eventLevel == 1)
	{
		possibleBackJump = false;
	}

	/*if (eventName == "Calculate")
		console.println("Leave Event: " + eventName + ", " + event.source.name + ", " + eventLevel);
	else
		console.println("Leave Event: " + eventName + ", " + event.target.name + ", " + eventLevel);*/
	
	eventLevel--;
}

function getFieldById(id)
{
	if (fieldIdCached[id] != undefined)
	{
		return fieldIdCached[id];
	}
	else
	{
		var name = fieldIdNameMapping[""+id];
		if (name == undefined) return undefined;
		var field = this.getField(name);
		if (field == undefined) return undefined;
		fieldIdCached[id] = field;
		return field;
		return undefined;
	}
}

function doRules(rulesArr)
{
	if(rules != undefined)
	{
		if (!ignoreAllRules)
		{
			rulesArr.sort();
			for(var i = 0; i < rulesArr.length; i ++)
			{
				var rule = rules[rulesArr[i]];
				CALCULATE_RULES = true;
				var complied = Boolean(rule["condition"]());
				if(complied)
				{
					if(rule["trueActions"] != undefined)
					{
						for(var j = 0; j < rule["trueActions"].length; j++)
						{
							tabOn = false;
							rule["trueActions"][j]();
							tabOn = true;
						}
					}
				}
				else
				{
					if(rule["falseActions"] != undefined)
					{
						for(var j = 0; j < rule["falseActions"].length; j++)
						{
							tabOn = false;
							rule["falseActions"][j]();
							tabOn = true;
						}
					}
				}
			}
		}
		//this.console.println("setFocus: " + event.target.name + " level: " + eventLevel);

		if(commitWithTab && tabOn && eventLevel == 1)
		{
			var nextFieldName = tabOrder[tabTarget];
			var name = nextFieldName;
			var field2 = this.getField(name);

			while(field2 != null && (field2.display == 1 || field2.display == 3 || field2.readonly))
			{
				name = tabOrder[name];
				field2 = this.getField(name);
			}

			field2.setFocus();
			possibleBackJump = true;
			commitWithTab = false;
		}
	}
}

function customValidateAllFieldsWithBlur(fieldName)
{
	if(fields[fieldName] != undefined && fields[fieldName]["validations"] != undefined)
	{
		for(var i = 0; i < fields[fieldName]["validations"].length; i++)
		{
			var fName = fields[fieldName]["validations"][i];
			var field = this.getField(fName);

			if(field != undefined)
			{
				generateOnlyValidateEvent(field);
				var dummyEvent = new Object();
				dummyEvent.target = field;
				dummyEvent.name = "Blur";
				handleEvent(dummyEvent);
			}
		}
	}
}

function customValidateAllFields(fieldName)
{
	if(fields[fieldName] != undefined && fields[fieldName]["validations"] != undefined)
	{
		for(var i = 0; i < fields[fieldName]["validations"].length; i++)
		{
			var fName = fields[fieldName]["validations"][i];
			var field = this.getField(fName);

			if(field != undefined)
			{
				generateOnlyValidateEvent(field);
			}
		}
	}
}

function calculateFields(event)
{
	if (event.source == undefined) return;
	var currFieldName = event.source.name;
	
	customValidateAllFieldsWithBlur(currFieldName);
	if (fields[currFieldName] == undefined) return;
	
	var fieldId = fields[currFieldName]["id"];
	var currIndex = calcTreeEntryMapping[fieldId+""];
	
	var rulesArr = new Array();
	if (currIndex != -1 && currIndex != undefined)
	{
		var first = true;
	
		while (currIndex != -1 && currIndex != undefined)
		{
			if (flatCalcTree[currIndex] == undefined) break;
			var field = getFieldById(flatCalcTree[currIndex].fieldId);
			if(field != undefined && first == false)
			{
				var changed = calculateField(field);
				if (changed)
					customValidateAllFieldsWithBlur(field.name);
			}
			
			for(var i = 0; i < fields[field.name]["rules"].length; i++)
			{
				var rule = fields[field.name]["rules"][i];
				rulesArr.push(rule);
			}
			
			currIndex = flatCalcTree[currIndex].next;
			first = false;
		}
	}
	else
	{
		for(var i = 0; i < fields[event.source.name]["rules"].length; i++)
		{
			var rule = fields[event.source.name]["rules"][i];
			rulesArr.push(rule);
		}
	}
	
	
	// execute rules sorted in next event for that the rules can change the actual edited value
	doRules(rulesArr);
}

function calculateField(field)
{
	var changedValue = false;
	if(fields[field.name]["expression"] != undefined)
	{	
		CANCEL_CALCULATION = false;
		CALCULATE_RULES = false;
		CALCULATION_ONE_FILLED = false;
		CALCULATION_ALL_FILLED = true;
		CALCULATION_WITH_FIELD = false;
		
		var evaluated = fields[field.name]["expression"]();
		if (CANCEL_CALCULATION)
		{
			if (field.value != "")
			{
				field.value = "";
				changedValue = true;
			}
		}
		
		else if (CALCULATION_WITH_FIELD == true &&
				((fields[field.name]["expressionBehavior"] == 0 && CALCULATION_ALL_FILLED == false) || (fields[field.name]["expressionBehavior"] == 1 && CALCULATION_ONE_FILLED == false)))
		{
			// handle behavior if empty fields
			if (field.value != "")
			{
				field.value = "";
				changedValue = true;
			}
		}
		else
		{
			var newValue;
			if (typeof(evaluated) == 'number')
				newValue = formatNumber(evaluated, "0.#########");
			else
				newValue = evaluated;
				
			if (newValue != field.value)
			{
				field.value = newValue;
				changedValue = true;
			}
		}
	}
	return changedValue;
}

function generateDoRules(field)
{
	var rulesArr = new Array();
	for(var i = 0; i < fields[field.name]["rules"].length; i++)
	{
		var rule = fields[field.name]["rules"][i];
		rulesArr.push(rule);
	}
	doRules(rulesArr);
}

function arrayContains(arr, val)
{
	for(var i = 0; i < arr.length; i++)
	{
		if(arr[i] == val) return true;
	}

	return false;
}

function generateBlurEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.value;
	dummyEvent.target = field;
	dummyEvent.name = "Blur";
	handleEvent(dummyEvent);
}

function generateValidateEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.value;
	
	generateOnlyValidateEvent(field);
	dummyEvent.target = field;
	dummyEvent.name = "Calculate";
	dummyEvent.source = field;
	handleEvent(dummyEvent)
	calculateField(field);
	dummyEvent.name = "Blur";
	handleEvent(dummyEvent);
}

function generateOnlyValidateEvent(field)
{
	var dummyEvent = new Object();
	var fieldValue = field.valueAsString;
	// take the display value for combobox fields
	if (field.type == "combobox")
	{
		var index = field.currentValueIndices;
		
		if (index != -1)
		{
			var name = field.getItemAt(index, false);
			if (name != undefined)
				fieldValue = name;
		}
	}
	
	dummyEvent.name = "Validate";
	dummyEvent.target = field;
	dummyEvent.value = fieldValue;
	handleEvent(dummyEvent);
	
	// set field value if validate has changed value
	if (dummyEvent.value+"" != fieldValue+"")
	{
		ignoreAllEvents = true;
		field.value = dummyEvent.value;
		ignoreAllEvents = false;
	}
	else if (field.type != "combobox")
	{
		ignoreAllEvents = true;
		field.value = field.valueAsString;
		ignoreAllEvents = false;
	}
}

function javascriptsLoaded()
{
	openTime = new Date();
	initForm();
}

function initForm(dontFocusFirstField)
{
	//this.delay = true;
	this.calculate = false;
	IN_INIT = true;

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			if (field.type != "checkbox")
			{
				generateOnlyValidateEvent(field);
			}
			else
			{
				// only validate check box group one time
				if (fields[field.name] != undefined && fields[field.name]["cbGroup"] != undefined && fields[field.name]["cbGroup"] != "")
				{
					var cbGroup = fields[field.name]["cbGroup"];
					if (CACHED_CB_GROUPS[cbGroup] == undefined)
						CACHED_CB_GROUPS[cbGroup] = new Array();
					
					CACHED_CB_GROUPS[cbGroup].push(field);
				}
				else
					generateOnlyValidateEvent(field);
			}
		}
	}
	
	// validate check box groups
	for (var group in CACHED_CB_GROUPS)
	{
		if (validateCbGroup != undefined)
		{
			validateCbGroup(CACHED_CB_GROUPS[group], undefined);
		}
	}

	for (var i = 0; i < openCalcOrderList.length; i ++)
	{
		var fieldId = openCalcOrderList[i];
		var field = getFieldById(fieldId);
		if (field == undefined) continue;
		
		ignoreAllEvents = true;
		var changed = calculateField(field);
		ignoreAllEvents = false;
		if (changed)
		{
			generateOnlyValidateEvent(field);
			customValidateAllFields(field.name);
		}
	}

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			generateDoRules(field);
			if (field.type != "checkbox")
				generateBlurEvent(field);
			else
			{
				if (!(fields[field.name] != undefined && fields[field.name]["cbGroup"] != undefined && fields[field.name]["cbGroup"] != ""))
					generateBlurEvent(field);
			}
		}
	}
	
	IN_INIT = false;

	if (dontFocusFirstField == undefined || dontFocusFirstField == false)
		focusFirstField();
	
	this.calculate = true;
	//this.delay = false;
}

function focusFirstField()
{
	var firstFieldName = formProperties["firstField"];

	if(fields[firstFieldName] != undefined)
	{
		var field = this.getField(firstFieldName);

		if(field != undefined)
		{
			field.setFocus();
		}
	}
}

function willPrint()
{
	for(var k in fields)
	{
		var field = this.getField(k);
		field.fillColor = fields[field.name]["backgroundColor"];
	}
	
	ignoreAllEvents = true;
	for(var k in fields)
	{
		var field = this.getField(k);
		
		if (fields[k]["_empty"] == true && fields[k]["nullText"] != undefined && fields[k]["nullText"] != "")
		{
			field.value = "";
		}
	}
	ignoreAllEvents = false;
	
	var formEmpty = isFormEmpty();
	
	var generateDm = false;
	if (!formEmpty)
	{
		generateDm = true;
		
		var result = checkForm();
		if(result != undefined)
		{
			if (!formProperties.alwaysAllowPrint)
			{
				if (formProperties.printShowMessage)
				{
					app.alert(formProperties.printShowMessageText);
				}
				if (formProperties.printShowHiddenField && formProperties.printHiddenField != undefined && formProperties.printHiddenField != "")
				{
					var field = getField(formProperties.printHiddenField);
					if (field != undefined)
					{
						printHiddenFieldOriginalDisplay = field.display;
						field.display = display.noView;
					}
				}
			}
			result.setFocus();
			
			generateDm = formProperties.printGenerateDataMatrix;
		}
	}
	
	if(dmArray.length > 0)
	{
		if (generateDm == true)
			calcBarcode(dmArray);
		else
			clearBarcode(dmArray);
	}
	
	ignoreAllEvents = true;
}

function didPrint()
{
	ignoreAllEvents = false;
	
	var dummyEvent = new Object();

	// null text
	for(var k in fields)
	{
		var field = this.getField(k);
		if (fields[k]["_empty"] == true && fields[k]["nullText"] != undefined && fields[k]["nullText"] != "")
		{
			field.value = "";
		}
	}

	for(var k in fields)
	{
		var field = this.getField(k);

		if(field != undefined)
		{
			dummyEvent.target = field;
			dummyEvent.value = field.value;
			dummyEvent.name = "Blur";
			handleEvent(dummyEvent);
		}
	}
	
	if (!formProperties.alwaysAllowPrint)
	{
		if (formProperties.printShowHiddenField && formProperties.printHiddenField != undefined && formProperties.printHiddenField != "" && printHiddenFieldOriginalDisplay != undefined)
		{
			var field = getField(formProperties.printHiddenField);
			if (field != undefined)
			{
				field.display = printHiddenFieldOriginalDisplay;
			}
		}
	}
	
	printHiddenFieldOriginalDisplay = undefined;
}

function checkForm()
{
	for(var k in tabOrder)
	{
		if(fields[k]["validity"] == INVALID)
		{
			var field = this.getField(k);

			if(field.display == display.visible || field.display == display.noPrint)
			{
				return field;
			}
		}

		if(fields[k]["_empty"] == true && fields[k]["required"])
		{
			var field = this.getField(k);

			if(field.display == display.visible || field.display == display.noPrint)
			{
				return field;
			}
		}
	}

	return undefined;
}

function isFormEmpty()
{
	for(var k in fields)
	{
		var field = this.getField(k);
		if (field.valueAsString != field.defaultValue && !field.readonly)
		{
			return false;
		}
	}
	
	return true;
}

// iPDF Reader Importer
function dataHasImported(event)
{
	if (event.value == "imported")
	{
		initForm();
	}
}
/* Rijndael (AES) Encryption
 * Copyright 2005 Herbert Hanewinkel, www.haneWIN.de
 * version 1.0, check www.haneWIN.de for the latest version

 * This software is provided as-is, without express or implied warranty.  
 * Permission to use, copy, modify, distribute or sell this software, with or
 * without fee, for any purpose and by any individual or organization, is hereby
 * granted, provided that the above copyright notice and this paragraph appear 
 * in all copies. Distribution as a part of an application or binary must
 * include the above copyright notice in the documentation and/or other materials
 * provided with the application or distribution.
 */

function AES_init(){}

var blockSizeInBits = 128;
var keySizeInBits = 128;

// The round constants used in subkey expansion
var Rcon = [ 
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 
0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 
0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ];

// Precomputed lookup table for the SBox
var S = [
 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 
118, 202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 
114, 192, 183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 
216,  49,  21,   4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 
235,  39, 178, 117,   9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 
179,  41, 227,  47, 132,  83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 
190,  57,  74,  76,  88, 207, 208, 239, 170, 251,  67,  77,  51, 133,  69, 
249,   2, 127,  80,  60, 159, 168,  81, 163,  64, 143, 146, 157,  56, 245, 
188, 182, 218,  33,  16, 255, 243, 210, 205,  12,  19, 236,  95, 151,  68,  
23,  196, 167, 126,  61, 100,  93,  25, 115,  96, 129,  79, 220,  34,  42, 
144, 136,  70, 238, 184,  20, 222,  94,  11, 219, 224,  50,  58,  10,  73,
  6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121, 231, 200,  55, 109, 
141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8, 186, 120,  37,  
 46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138, 112,  62, 
181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158, 225,
248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  
 22 ];

var T1 = [
0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6,
0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591,
0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56,
0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec,
0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa,
0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb,
0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45,
0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b,
0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c,
0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83,
0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9,
0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a,
0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d,
0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f,
0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df,
0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea,
0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34,
0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b,
0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d,
0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413,
0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1,
0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6,
0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972,
0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85,
0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed,
0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511,
0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe,
0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b,
0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05,
0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1,
0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142,
0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf,
0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3,
0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e,
0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a,
0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6,
0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3,
0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b,
0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428,
0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad,
0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14,
0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8,
0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4,
0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2,
0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda,
0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949,
0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf,
0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810,
0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c,
0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697,
0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e,
0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f,
0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc,
0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c,
0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969,
0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27,
0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122,
0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433,
0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9,
0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5,
0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a,
0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0,
0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e,
0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c ];

…
font_00_sfnt_off00024424.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x24424 21716 bytes
SHA-256: 5eed140d5a671f128f7d4cc7e64d4eec766b38e1a6439b33e206bdb438ee7e0f
font_01_sfnt_off000262a0.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x262A0 7520 bytes
SHA-256: d95f58a119f91bee73a40907be6e78ab66835e98b1a3fa115966739358824f25
font_02_sfnt_off00026d19.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x26D19 57820 bytes
SHA-256: ff3468bbb649df8556cdc7eb9bc06780c8bcfc5cde3069af3b50803b550c441b
font_03_sfnt_off0002cf67.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x2CF67 34636 bytes
SHA-256: a6996f0f8cf243a903f852ac10837001b654e974e6d08713043a19bf9c48259d
font_04_sfnt_off00030aed.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x30AED 23436 bytes
SHA-256: 10784542d9db7e0817f8e1e0f58a1b88e970c02d4bece0b50c7970051cf9b84d
font_05_sfnt_off00032cae.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x32CAE 6104 bytes
SHA-256: b7821bcea097fb58e308d88b137a9b731bf9ac1e821d151001224a69b32ee598
font_06_sfnt_off00033971.bin pdf-font-stream PDF embedded font (sfnt) at offset 0x33971 7372 bytes
SHA-256: 7f5f72a5873c75fe87ee169344d1beab161a98bd011d505ca00a0ccf91152ced